Невозможно вызвать методы сопоставления из проверок - PullRequest
2 голосов
/ 01 февраля 2012

У меня возникают проблемы при вызове методов, сгенерированных моими ассоциациями, в моих проверках.

Мой код довольно прост:

class Match < ActiveRecord::Base
  # Associations
  belongs_to :tournament

  has_many :match_player_relations
  has_many :waiting_players, through: :match_player_relations
  has_many :replays

  # Validations
  validates :tournament_id, presence: true
  validates :winner_id, inclusion: { in: waiting_players.map { |wp| wp.id } }
end

Я подтвердил в своих тестах, что существуетМетод wait_players, и он работает правильно.Однако, когда я пытаюсь вызвать его в своих проверках, я получаю следующую ошибку:

/Users/max/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.1.3/lib/active_record/base.rb:1088:in `method_missing': undefined local variable or method `waiting_players' for #<Class:0x007fc3b498c9c8> (NameError)
    from /Users/max/workplace/CloudLeagues/app/models/match.rb:11:in `<class:Match>'

Есть ли способ решить эту проблему?Или мне нужно удалить проверку?

1 Ответ

3 голосов
/ 02 февраля 2012

Уверен, вам нужно передать лямбду на in для доступа к текущей записи:

validates :winner_id, inclusion: { 
  in: lambda {|match| match.waiting_players.map { |wp| wp.id }}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...