Lowgain, no suena como lo que es, pero solo para asegurarse de que en realidad no está haciendo pruebas con un named_scope llamado scope ¿verdad? Porque ámbito es un método existente y usar eso como su nombre de ámbito provoca un error (y un bucle infinito).
EDIT:
¿Esto sucede a su named_scope para incluir una: cláusula de límite? Acabo de empezar a tener un problema similar. Tengo una respuesta modelo que belongs_to usuario, con un alcance algo llamado así:
named_scope :top, lambda { |limit| {
:limit => limit,
:order => 'total_score DESC' }}
Y yo estoy viendo los resultados en la consola como esta:
?> u = User.find 1
?> u.responses.length
=> 9
?> u.responses.paginate(:page => 1, :per_page => 5).length
=> 5
?> u.responses.top(3).length
=> 3
?> u.responses.top(3).paginate(:page => 1, :per_page => 5).length
=> 5
Huy! ¿Cómo puede mi top 3 paginar para producir más de 3 filas?Por su ejemplo Probé su hallazgo (: todos) engañar con resultados similares:
?> u.responses.top(3).find(:all).paginate(:page => 1, :per_page => 5).length
=> 3
Esto parece un error en named_scope, porque puedo tener will_paginate fuera de la imagen y obtener caos similar al producirse:
?> u.responses.top(3).length
=> 3
?> u.responses.top(3).size
=> 9 <-- .size produces wrong answer
?> r = u.responses.top(3)
?> r.size
=> 3 <-- correct when result assigned to var
Hasta ahora, esto solo parece ocurrir cuando uso MySQL. Creo que leí otra publicación en StackOverflow en la que alguien tuvo un problema similar al usar .size con AR results y MySQL, y la solución fue usar siempre .length en sus resultados de AR. He intentado modificar will_paginate para reemplazar todas las instancias de .size con .length, pero desafortunadamente no fue tan simple, pero sospecho que este o un problema similar está afectando de algún modo a will_paginate.
Por el momento, estoy utilizando tu truco de encontrar (: todo) para hackear esto.
Hmm, ¡esto es interesante! ¿Hay algún tipo de inconveniente de rendimiento notable para hacerlo de esta manera, ya que está paginando cada propiedad? – Lowgain
¿Cómo puede paginar cada propiedad? :) No todos, pero todos. Alcance con nombre * all_properties * es un tipo de método de clase (¡no instancia!). Entonces, cuando llamamos a * self.all_properties *, recibimos todas las propiedades de este alcance nombrado. Luego los paginamos. Auto significa propiedad de clase en sí misma, no objeto de propiedad de clase. – Voldy