ruby on rails 3 - select_tag - método indefinido `página ''para#<Array: 0xafd0660>
rails select_tag remote (5)
No puedo pasar esto. Sé que he leído que no hay un método de página para matrices, pero ¿qué hago?
Si ejecuto Class.all en la consola, devuelve #, pero si ejecuto Class.all.page (1), obtengo el error anterior.
¿Algunas ideas?
Cuando obtienes una página de método no definido para Array, probablemente estés usando kaminari gem y estés tratando de paginar tu Modelo dentro de una acción de controlador.
NoMethodError at /
undefined method `page'' for # Array
Allí debe recordarse dos cosas, que la colección que está dispuesto a paginar puede ser un Array o ActiveRecordRelation o, por supuesto, algo más.
Para ver la diferencia, digamos que nuestro modelo es Producto y estamos dentro de nuestra acción de índice en products_controller.rb . Podemos construir nuestros productos con @ digamos uno de los siguientes:
@products = Product.all
o
@products = Product.where(title: ''title'')
o algo más ... etc
De cualquier manera obtenemos sus productos @, sin embargo , la clase es diferente.
@products = Product.all
@products.class
=> Array
y
@products = Product.where(title: ''title'')
@products.class
=> Product::ActiveRecordRelation
Por lo tanto, dependiendo de la clase de la colección que estemos dispuestos a compaginar, Kaminari ofrece:
@products = Product.where(title: ''title'').page(page).per(per)
@products = Kaminari.paginate_array(Product.all).page(page).per(per)
Para resumirlo un poco, una buena manera de agregar paginación a su modelo:
def index
page = params[:page] || 1
per = params[:per] || Product::PAGINATION_OPTIONS.first
@products = Product.paginate_array(Product.all).page(page).per(per)
respond_to do |format|
format.html
end
end
y dentro del modelo que desea paginar (product.rb):
paginates_per 5
# Constants
PAGINATION_OPTIONS = [5, 10, 15, 20]
Kaminari ahora tiene un método para paginar matrices, por lo que puedes hacer algo como esto en tu controlador:
myarray = Class.all
@results = Kaminari.paginate_array(myarray).page(params[:page])
No Array no tiene un método de página.
Parece que estás utilizando kaminari. Class.all devuelve una matriz, por lo que no puede llamar a page. En su lugar, utilice Class.page (1) directamente.
Para matrices normales, Kaminari tiene un gran método auxiliar:
Kaminari.paginate_array([1, 2, 3]).page(2).per(1)
Solucioné el problema invocando los ganchos de Kaminari manualmente. Agregue esta línea para ejecutar en uno de sus primeros inicializadores:
Kaminari::Hooks.init
Publiqué más detalles en otra respuesta:
Página de método no definido para # <Array: 0xc347540> kaminari "page" error. rails_admin
Yo tenía el mismo error. Hizo la actualización del paquete y luego reinició el servidor. Uno de los dos lo arregló.