tag select_tag remote rails form ruby-on-rails-3 mongoid kaminari

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)



Yo tenía el mismo error. Hizo la actualización del paquete y luego reinició el servidor. Uno de los dos lo arregló.