könnten Sie default_scope
verwenden:
class ExampleModel < ActiveRecord::Base
default_scope :conditions => ["status = ?", "active"]
end
Wenn Sie dies in allen Modellen verwenden möchten, können Sie entweder Unterklasse ActiveRecord::Base
und leiten sich von dem in allen Modellen (wahrscheinlich nicht gut funktioniert mit Single- Tabelle Vererbung):
class MyModel < ActiveRecord::Base
default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < MyModel
end
... oder Sie könnten die default_scope
auf ActiveRecord::Base
selbst (könnte ärgerlich sein gesetzt, wenn Sie entscheiden, dass ein Modell nicht diesen Standardbereich haben soll):
class ActiveRecord::Base
default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
Wie klochner in einem Kommentar erwähnt, können Sie auch eine named_scope
zu ActiveRecord::Base
, genannt active
, zum Beispiel das Hinzufügen zu berücksichtigen:
class ActiveRecord::Base
named_scope :active, :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
ExampleModel.active # Return all active items.
wie ab 3.2.8 wird die neue Methode
scope
, die verwendet diewhere
Methode anstelle von:conditions
Alt genannt über einen benannten Bereich auf ActiveRecord :: Base? Das würde weniger wahrscheinlich andere Entwickler verwirren, wenn das Projekt geteilt wird. – klochner
@klochner, ja, guter Punkt. Etwas wie ExampleModel.active ist sehr ausdrucksstark. – molf
Um es ein wenig mehr zu bereinigen, könnten Sie eine Klasse von ActiveRecord ableiten, die den benannten (oder neuen Standard) Geltungsbereich hat, und davon ExampleModel ableiten. Jetzt ist die neue Funktionalität explizit. – klochner