5

Qualcuno ha avuto successo con Rails 3, Mongoid e Inherited Resources funzionante? Qualche consiglio per farlo accadere? Mi piacerebbe usare entrambe le gemme.Inherited Resources and Mongoid

Attualmente sono in esecuzione in:

undefined method `scoped' 

sulle azioni di indice.

Grazie!


BTW una soluzione per il problema ambito è quello di ignorare la raccolta in questo modo:

class CampaignsController < InheritedResources::Base 

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

end 

Ma io sto cercando un approccio più olistico

risposta

10

Se si utilizza solo mongoid, quello che si dovrebbe fare è sovrascrivere il comportamento di raccolta predefinito in risorse ereditate. Il comportamento di default è questo:

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

Detto questo, il seguente dovrebbe fare il trucco:

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

InheritedResources::Base.send :include, MongoidActions 

È anche possibile difetto la collezione per impaginare e hanno impaginazione gratuitamente in tutte le pagine.

+0

Grazie Jose !! Funziona alla grande. Adoro le risorse ereditate ed ero ansioso di provare Mongoid - lieto che fosse facile farli giocare bene. Aggiornamento – Jonathan

+0

: questo è stato incorporato nel master adesso, giusto? – bonhoffer

0

Post molto utile!

Come si farebbe questo se il controller non può essere una sottoclasse di InheritedResource::Base, ma piuttosto è necessario utilizzare il metodo della classe inherit_resources, in questo modo:

class MyController < AlreadyInheritedFromController 
    inherit_resources 
end 

la patch scimmia di cui sopra non sembra funzionare in questa configurazione .

Sembra che la chiave potrebbe essere InheritedResources::Base.inherit_resources ma non sono chiaro sul modo corretto di sovrascrivere questo metodo. Per favore correggi se sono sulla strada sbagliata qui.

4

In alternativa si può patchare Mongoid:

module MongoidScoped 
    def scoped 
    all 
    end 
end 

Mongoid::Finders.send :include, MongoidScoped 

questo renderà il lavoro inherit_resources metodo come previsto.

2

Ecco cosa ho fatto per coprire entrambi ereditando da InheritedResources::Base e usando la dichiarazione inherit_resources.

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

In genere mettere questo in un inizializzatore (io uso config/initializers/mongoid.rb).

Rende amichevole Mongoid 2.0.0.beta.20 e inherited_resources 1.2.1.

+0

'mongoid 2.0.0.rc7' pure. – Voldy