Można użyć default_scope
:
class ExampleModel < ActiveRecord::Base
default_scope :conditions => ["status = ?", "active"]
end
Jeśli chcesz użyć tego we wszystkich modelach, to albo można podklasa ActiveRecord::Base
i czerpać z tego we wszystkich modelach (prawdopodobnie nie działa dobrze z jedno- tabela dziedziczenie):
class MyModel < ActiveRecord::Base
default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < MyModel
end
... czy można ustawić default_scope
na samej ActiveRecord::Base
(może być irytujące, jeśli uznasz, że jeden model nie powinien mieć tego domyślnego zakresu):
class ActiveRecord::Base
default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
Jak wspomniano przez klochner w komentarzu, można także rozważyć dodanie named_scope
do ActiveRecord::Base
, nazwany active
, na przykład:
class ActiveRecord::Base
named_scope :active, :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
ExampleModel.active # Return all active items.
jak o nazwanym zakresie w ActiveRecord :: Base? Byłoby mniej prawdopodobne, że pomylimy innych deweloperów, jeśli projekt zostanie udostępniony. – klochner
@klochner, tak, dobry punkt. Używanie czegoś takiego jak ExampleModel.active jest bardzo ekspresyjne. – molf
, aby nieco go oczyścić, możesz wyprowadzić klasę z ActiveRecord, która ma nazwany (lub nowy domyślny) zakres, i wyprowadzić z niej PrzykładModel. Teraz nowa funkcja jest jawna. – klochner