ActiveRecord: пользовательские проверки - PullRequest
2 голосов
/ 22 июля 2010

Я хочу создать пользовательские проверки.

У пользователя есть столбец с именем "rule_values", который представляет собой сериализованный хэш определенных количеств.

В отдельной модели, Foo, у меня есть проверка:

class Foo < ActiveRecord::Base
  belongs_to :user

  n = self.user.rule_values[:max_awesome_rating] #this line is giving me trouble!
  validates_presence_of :awesome_rating, :in => 1..n
end

Кажется, что self ссылается на Foo (именно поэтому я получаю неопределенную ошибку метода), а не на экземпляре Foo. Как я могу получить доступ к экземпляру User из модели Foo?

Ответы [ 2 ]

1 голос
/ 22 июля 2010

Rails поддерживает пользовательские проверки (с использованием validate). Вот идея того, как это может работать (хотя и не проверял):

class Foo < ActiveRecord::Base
  belongs_to :user
  validate :awesome_rating_is_in_range

  def awesome_rating_is_in_range
    errors.add(:awesome_rating, 'not in range') unless (1..user.rule_values[:max_awesome_rating]).include? awesome_rating
  end
end
1 голос
/ 22 июля 2010

Как насчет создания пользовательской проверки на Foo как-то так?

class Foo < ActiveRecord::Base

  validate do |foo|
    n = foo.user.rule_values[:max_awesome_rating]
    unless (1..n).include? foo.awesome_rating
      foo.errors.add :awesome_rating, "must be present and be between 1 and #{n}"
    end
  end

end

Таким образом, у вас есть доступ к экземпляру и ассоциации пользователей

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