Как автоматически добавить дополнительное условие ко всем моделям в Rails? - PullRequest
2 голосов
/ 21 марта 2012

Теперь я пришел к тому, что мне нужно добавить дополнительное правило по умолчанию в Rails.

например. когда я звоню:
Person.first
Employee.all
Это автоматически сделает:
Person.first (: условие => ['age <?', 100]) <br /> Employee.all (: условие => ['age <?', 100]) <br />

Здесь условие возраста <100 добавляется ко всем моделям, включая подресурсы, есть ли способ сделать это в Rails? </p>

Ответы [ 2 ]

0 голосов
/ 17 апреля 2013

Я рекомендую не использовать область по умолчанию для условий, просто для упорядочивания.

Поэтому я бы добавил именованную область в каждую модель, а затем использовал бы эту область для большинства запросов, например,

Rails 3

scope :confirmed, :conditions => { 'age < ?',100 }

Rails 4

Некоторые области видимости переходят в классовые методы (в любом случае, какими они в основном являются), поэтому вы можете использовать что-то вроде:

def age_limit
  where :age < 100
end

Более подробную информацию об использовании областей действия можно получить по адресу: https://stackoverflow.com/a/5609947/631619

Наличие одного и того же кода в большем, чем в модели, несколько неуместно, но это маршруты, которые я бы выбрал для менее чем дюжины моделей.Вы также можете создать константу AGE_LIMIT, но тогда системная константа сопряжена с проблемами.Возможно, вам лучше создать модель, возможно, только для возраста, затем создать модель для max_age, а затем обратиться к ней.Нечто подобное.

0 голосов
/ 21 марта 2012

вы можете использовать default_scope, как показано ниже

class Person < ActiveRecord::Base
  default_scope :conditions => ['age < ?', 100]
end

Вас может заинтересовать этот пост.

http://archives.ryandaigle.com/articles/2008/11/18/what-s-new-in-edge-rails-default-scoping

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...