Geerbte Ressourcen und Mongoid
-
27-10-2019 - |
Frage
Hatte jemand Erfolg mit Rails 3? Mongoid Und Geerbte Ressourcen Arbeiten?Irgendwelche Tipps, um dies zu erreichen?Ich würde gerne beide Edelsteine verwenden.
Momentan stoße ich auf Folgendes:
undefined method `scoped'
Zu Indexaktionen.
Danke!
Übrigens besteht eine Problemumgehung für das bereichsbezogene Problem darin, die Sammlung wie folgt zu überschreiben:
class CampaignsController < InheritedResources::Base
def collection
@campaigns ||= end_of_association_chain.paginate(:page => params[:page])
end
end
Aber ich suche nach einem ganzheitlicheren Ansatz
Lösung
Wenn Sie nur Mongoid verwenden, sollten Sie das Standardsammlungsverhalten in Inherited Resources überschreiben.Das Standardverhalten ist folgendes:
Das heißt, Folgendes sollte den Zweck erfüllen:
module MongoidActions
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
InheritedResources::Base.send :include, MongoidActions
Sie können die Sammlung sogar standardmäßig paginieren lassen und die Paginierung auf allen Seiten kostenlos nutzen.
Andere Tipps
Alternativ können Sie Mongoid patchen:
module MongoidScoped
def scoped
all
end
end
Mongoid::Finders.send :include, MongoidScoped
Das wird machen inherit_resources
Methode funktioniert wie erwartet.
Hier ist, was ich getan habe, um beides abzudecken, von dem ich geerbt habe InheritedResources::Base
und nutzen inherit_resources
Stellungnahme.
module InheritedResources
module BaseHelpers
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
end
Normalerweise geben Sie dies in einen Initialisierer ein (ich verwende config/initializers/mongoid.rb
).
Macht Mongoid 2.0.0.beta.20
Und inherited_resources 1.2.1
freundlich.
Sehr hilfreicher Beitrag!
Wie würden Sie dies tun, wenn von Ihrem Controller keine Unterklasse erstellt werden kann? InheritedResource::Base
sondern Sie müssen die Klassenmethode verwenden inherit_resources
, etwa so:
class MyController < AlreadyInheritedFromController
inherit_resources
end
Der obige Monkey-Patch scheint in diesem Setup nicht zu funktionieren.
Es sieht so aus, als wäre es der Schlüssel InheritedResources::Base.inherit_resources
Ich bin mir jedoch nicht sicher, wie ich diese Methode richtig überschreiben soll.Bitte korrigieren Sie, wenn ich hier auf dem falschen Weg bin.