Hérité Ressources et MongoId
-
27-10-2019 - |
Question
Quelqu'un at-il eu du succès ayant Rails 3, MongoId et Ressources héritée de travail? Tous les conseils pour la faire advenir? J'aimerais utiliser les deux pierres précieuses.
Actuellement, je suis en cours d'exécution dans:
undefined method `scoped'
Sur les actions de l'indice.
Merci!
BTW une solution pour la question scope est prioritaire collection comme ceci:
class CampaignsController < InheritedResources::Base
def collection
@campaigns ||= end_of_association_chain.paginate(:page => params[:page])
end
end
Mais je suis à la recherche d'une approche plus holistique
La solution
Si vous utilisez uniquement MongoId, ce que vous devez faire est de remplacer le comportement de collection par défaut dans les ressources héritées. Le comportement par défaut est le suivant:
Cela dit, ce qui suit devrait faire l'affaire:
module MongoidActions
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
InheritedResources::Base.send :include, MongoidActions
Vous pouvez même défaut que la collection paginate et ont gratuitement dans la pagination toutes les pages.
Autres conseils
Sinon, vous pouvez patcher MongoId:
module MongoidScoped
def scoped
all
end
end
Mongoid::Finders.send :include, MongoidScoped
Cela fera méthode de travail de inherit_resources
comme prévu.
Voici ce que je faisais pour couvrir à la fois héritant de InheritedResources::Base
et utilisez l'instruction inherit_resources
.
module InheritedResources
module BaseHelpers
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
end
En général, vous mettre cela en un initialiseur (j'utilise config/initializers/mongoid.rb
).
Fait Mongoid 2.0.0.beta.20
et inherited_resources 1.2.1
amicale.
Très utile après!
Comment feriez-vous si votre contrôleur ne peut pas être sous-classé à partir InheritedResource::Base
mais vous devez utiliser la méthode de classe inherit_resources
, comme suit:
class MyController < AlreadyInheritedFromController
inherit_resources
end
le patch de singe ci-dessus ne semble pas fonctionner dans cette configuration.
Il semble que la clé est peut-être InheritedResources::Base.inherit_resources
mais je ne suis pas clair sur la manière correcte de remplacer cette méthode. S'il vous plaît corriger si je suis sur le mauvais chemin ici.