:group en paginate de rails no funciona

Hola , estoy intentando hacer un paginate rails de una tabla que
contiene
una consulta inner join

la siguiente consulta funciona correctamente

@series_obras_join = SeriesObra.find(:all,
:joins=>“INNER JOIN obras ON obras.que_serie = series_obras.id”,
:conditions=>{:quien_usr=>@artista.id},
:group=>“series_obras.id”)

pero a la hora de implementar esto e un paginate no funciona

        @items_pages, @items = paginate :series_obras , 

:order=>sort,
:joins=>“INNER JOIN obras ON obras.que_serie =
series_obras.id”,
:conditions=>{:quien_usr=>@artista.id},
:group=>“series_obras.id”,
:per_page => items_per_page

el error:

Unknown options: group

al parecer el paginate de rails no permite el :group, que es lo que
necesito
para ejecutar correctamente mi consulta.
en todo caso mi idea era hacer algo un poco mas elegante estableciendo
relaciones desde los modelos, pero no encuentro como se puede hacer un
inner
join desde los modelos, en mi caso intente hacer lo siguiente:

desde mi modelo “usuarios_artistas”

class UsuariosArtista < ActiveRecord::Base
has_many :series_obras , :foreign_key => “quien_usr” do
def series
find(:all,:joins=>“INNER JOIN obras ON obras.que_serie =
series_obras.id”,
:group=>“series_obras.id”)
end
end

entonces puedo llamar a los registros con algo asi, suponiendo que cargo
a
un registro de @artista

@artista.series_obras.series

pero como se pone eso en el paginate?? porque algo asi…

@items_pages, @items = paginate @artista.series_obras.series ,
:order=>sort,

          :per_page => items_per_page

me da un error, ¿como podria acceder
usuarios_artistas.series_obras.series ?

espero que se entienda el problema, si no me avisan y doy mas
antecedentes
al respecto

saludos

Miguel te recomiendo usar will_paginate[1] es recontra sencillo y trae
algunas opciones mas que el paginador de rails(que por cierto estara
pronto
‘deprecated’).

[1]http://errtheblog.com/post/4791

Saludos.

El día 3/11/07, Miguel M. [email protected] escribió:

Hola Rubén gracias por tu respuesta.

he usado will_paginate y es muy bueno, lo que pasa es que estaba
implementando una solucion que encontré en un tutorial en el cual se
mostraba como hacer paginacion en ajax
.http://sobrerailes.com/pages/paginacion_tablas_ajax
y como ya tengo eso resuelto y funcionando lo unico que me falta es
resolver
el tema del group del join o hacer que el paginate reciba reciba un sql
puro.

creo que la solucion estaría en hacer un metodo que permita incorporar
el
sql al paginate no?

bueno seguiré investigando, si no me resulta seguiré con el de
will_paginate
:slight_smile:

Saludos

Hola, encontré este pequeño snippet lo puse en application.rb

def find_by_sql_pagination(items_per_page,sql,table)
page = (params[:page] ||= 1).to_i
offset = (page - 1) * items_per_page
@items=table.find_by_sql(sql)
@items_pages=Paginator.new(self, @items.length, items_per_page,
page)
@items=@items[offset…(offset + items_per_page - 1)]
return @items_pages,@items
end

este me permite ejecutar consultas sql para el paginator y me devuelve
@items_pages,@items

he probado estas dos SQL

sql = “SELECT * FROM series_obras INNER JOIN obras on series_obras.id =
obras.que_serie
WHERE series_obras.quien_usr = 57 AND obras.publica=‘Y’
GROUP BY series_obras.id”

 sql2 = "SELECT * FROM series_obras WHERE series_obras.quien_usr = 

#{@
artista.id} ORDER BY ‘#{sort}’"

la unica que funciona es sql2, pero no tiene mucha gracia ya que ese sql
funcionaba de antes , a partir de mis modelos y de la llamada standart
de la
funcion paginate

pareciera que el paginate de rails no quiere nada con el GROUP BY, bueno
ya
se que el will_paginate tiene un buen soporte para la integracion de
sql,
pero es que ya estoy trabajando con el paginate de rails y estoy a un
pelo
de lograrlo y ademas me intriga bastante que no funcione cuando utilizo
el
GROUP BY en mi consulta

gracias por la ayuda. seguiré investigando

Saludos

On Nov 3, 2007 9:56 PM, Miguel M. [email protected]

Tu problema está en el SQL. No se puede ocupar el * en una consulta de
agrupación.
Debes indicar los campos agrupados después del SELECT.