Ereditato Risorse e Mongoid
-
27-10-2019 - |
Domanda
Qualcuno ha avuto successo con Rails 3, Mongoid e Inherited Resources di lavoro? Qualche consiglio per fare accadere? Mi piacerebbe utilizzare entrambe le gemme.
Al momento io sono in esecuzione in:
undefined method `scoped'
sulle azioni di indice.
Grazie!
A proposito di una soluzione per il problema di ambito è quello di raccolta di esclusione in questo modo:
class CampaignsController < InheritedResources::Base
def collection
@campaigns ||= end_of_association_chain.paginate(:page => params[:page])
end
end
Ma io sono alla ricerca di un approccio più olistico
Soluzione
Se si utilizza mongoid solo, cosa si dovrebbe fare è quello di sovrascrivere il comportamento predefinito in collezione Inherited Resources. Il comportamento di default è questo:
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
E 'possibile anche la raccolta di default per paginate e hanno impaginazione gratuitamente in tutte le pagine.
Altri suggerimenti
In alternativa si può patchare Mongoid:
module MongoidScoped
def scoped
all
end
end
Mongoid::Finders.send :include, MongoidScoped
Questo renderà il lavoro metodo inherit_resources
come previsto.
Here's what I did to cover both inheriting from InheritedResources::Base
and using inherit_resources
statement.
module InheritedResources
module BaseHelpers
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
end
You typically put this into an initializer (I use config/initializers/mongoid.rb
).
Makes Mongoid 2.0.0.beta.20
and inherited_resources 1.2.1
friendly.
Very helpful post !
How would you do this if your controller cannot be subclassed from InheritedResource::Base
but rather you have to use the class method inherit_resources
, like so :
class MyController < AlreadyInheritedFromController
inherit_resources
end
the above monkey patch does not seem to work in this setup.
It looks like the key might be InheritedResources::Base.inherit_resources
but i am unclear on the correct way to overwrite this method. Please correct if i am on the wrong path here.