Recursos hereditarios y monmongoides
-
27-10-2019 - |
Pregunta
¿Alguien ha tenido éxito con Rails 3? Monmongoide y Recursos heredados ¿laboral? ¿Algún consejo para que esto suceda? Me encantaría usar ambas gemas.
Actualmente me estoy encontrando con:
undefined method `scoped'
En acciones de índice.
¡Gracias!
Por cierto, una solución para el problema del alcance es anular la colección como así:
class CampaignsController < InheritedResources::Base
def collection
@campaigns ||= end_of_association_chain.paginate(:page => params[:page])
end
end
Pero estoy buscando un enfoque más holístico
Solución
Si está utilizando solo monmongoide, lo que debe hacer es sobrescribir el comportamiento de colección predeterminado en recursos heredados. El comportamiento predeterminado es este:
Dicho esto, lo siguiente debería hacer el truco:
module MongoidActions
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
InheritedResources::Base.send :include, MongoidActions
Incluso puede predecir la colección para paginar y tener paginación gratis en todas las páginas.
Otros consejos
Alternativamente, puede parchear Mongoide:
module MongoidScoped
def scoped
all
end
end
Mongoid::Finders.send :include, MongoidScoped
Esto hará inherit_resources
El método funciona como se esperaba.
Esto es lo que hice para cubrir ambos heredando de InheritedResources::Base
y usando inherit_resources
declaración.
module InheritedResources
module BaseHelpers
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
end
Por lo general, lo pones en un inicializador (uso config/initializers/mongoid.rb
).
Hace Mongoid 2.0.0.beta.20
y inherited_resources 1.2.1
amigable.
¡Publicación muy útil!
¿Cómo harías esto si tu controlador no puede ser subclasificado InheritedResource::Base
sino que tienes que usar el método de clase inherit_resources
, al igual que :
class MyController < AlreadyInheritedFromController
inherit_resources
end
El parche de mono anterior no parece funcionar en esta configuración.
Parece que la clave podría ser InheritedResources::Base.inherit_resources
Pero no estoy claro sobre la forma correcta de sobrescribir este método. Corrija si estoy en el camino equivocado aquí.