2009-08-25 12 views

Antwort

17

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. 
+0

wie ab 3.2.8 wird die neue Methode scope, die verwendet die where 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

+0

@klochner, ja, guter Punkt. Etwas wie ExampleModel.active ist sehr ausdrucksstark. – molf

+0

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

0

Update:named_scope war deprecated/renamed in Rails 3.1.

named_scope :active, :conditions => ["status = ?", "active"] 

Neu:

scope :active, where(:status => "active") 

oder

scope :active, where("status = ?", "active") 
Verwandte Themen