Проверка самореферентной ассоциации не ссылается на исходный экземпляр в rails - PullRequest
4 голосов
/ 03 июля 2010

У меня есть модель «многие ко многим», следуя примеру из этого замечательного рейлкаста

Моя модель связывает авторов между собой.Я хотел бы подтвердить, что автор не может дружить сам.Я знаю, что могу справиться с этим на уровне пользовательского интерфейса, но я бы хотел иметь валидацию, чтобы ошибка в пользовательском интерфейсе не позволяла это сделать.Я пробовал validates_exclusion_of , но это не работает.Вот моя модель для отношений:

class Friendship < ActiveRecord::Base
  # prevent duplicates
  validates_uniqueness_of :friend_id, :scope => :author_id
  # prevent someone from following themselves (doesn't work)
  validates_exclusion_of :friend_id, :in => [:author_id]

  attr_accessible :author_id, :friend_id
  belongs_to :author
  belongs_to :friend, :class_name => "Author"
end

1 Ответ

7 голосов
/ 03 июля 2010

Вам придется использовать пользовательскую проверку:

class Friendship < ActiveRecord::Base
  # ...

  validate :disallow_self_referential_friendship

  def disallow_self_referential_friendship
    if friend_id == author_id
      errors.add(:friend_id, 'cannot refer back to the author')
    end
  end
end
...