5

Alguien ha tenido éxito con Rails 3, Mongoid y Inherited Resources de trabajo? ¿Algún consejo para hacer que suceda? Me encantaría usar ambas gemas.Recursos heredados y Mongoid

Estoy actualmente en ejecución en:

undefined method `scoped' 

En las acciones del índice.

Gracias!


BTW una solución para el problema de ámbito es para anular la colección de este modo:

class CampaignsController < InheritedResources::Base 

    def collection 
    @campaigns ||= end_of_association_chain.paginate(:page => params[:page]) 
    end 

end 

Pero yo estoy buscando un enfoque más integral

Respuesta

10

Si está utilizando solamente MongoId, lo que debe hacer es sobrescribir el comportamiento de recopilación predeterminado en los recursos heredados. El comportamiento por defecto es la siguiente:

https://github.com/josevalim/inherited_resources/blob/master/lib/inherited_resources/base_helpers.rb#L22-24

Dicho esto, el siguiente debe 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 

Puede incluso por defecto la colección de paginar y tienen la paginación de forma gratuita en todas las páginas.

+0

Gracias Jose !! Funciona genial. Me encanta Inherited Resources, y estaba ansioso por probar Mongoid, me alegro de que fuera fácil hacer que jugaran bien. – Jonathan

+0

actualización: esto se ha incorporado al maestro por ahora, ¿verdad? – bonhoffer

0

Poste muy útil!

¿Cómo hacer esto si el controlador no puede ser una subclase de InheritedResource::Base sino que tiene que utilizar el método de la clase inherit_resources, así:

class MyController < AlreadyInheritedFromController 
    inherit_resources 
end 

el parche mono anterior no parece funcionar en esta configuración .

Parece que la clave podría ser InheritedResources::Base.inherit_resources pero no tengo muy claro sobre la forma correcta para sobrescribir este método. Corrija si estoy en el camino equivocado aquí.

4

alternativa, se puede parchear Mongoid:

module MongoidScoped 
    def scoped 
    all 
    end 
end 

Mongoid::Finders.send :include, MongoidScoped 

Esto va a hacer que el trabajo inherit_resources método como se esperaba.

2

Esto es lo que hice para abarcar tanto la herencia de InheritedResources::Base como la utilización de la declaración inherit_resources.

module InheritedResources 
    module BaseHelpers 
    def collection 
     get_collection_ivar || set_collection_ivar(end_of_association_chain.all) 
    end 
    end 
end 

Por lo general, poner esto en un inicializador (utilizo config/initializers/mongoid.rb).

Hace Mongoid 2.0.0.beta.20 y inherited_resources 1.2.1 amigable.

+0

'mongoid 2.0.0.rc7' también. – Voldy