2016-11-10 5 views
0

Есть 3 модели: Talk, Topic и Conference. У каждого есть заголовок и описание. A Conference имеет много Topics и Topic имеет много разговоров.Подтвердить уникальность поля с помощью: через ассоциацию

class Conference < ApplicationRecord 
    has_many :topics 
    has_many :talks, through: topics 
end 

class Topic < ApplicationRecord 
    belongs_to :conference 
    has_many :talks 
end 

class Talk < ApplicationRecord 
    belongs_to :topic 
    belongs_to :conference, through: :topic 
end 

Как проверить, что Talk имеет уникальное название в пределах Conference?

Единственное решение, с которым я мог придумать, - создать другую таблицу для ассоциации - Topic и выполнить проверку там. Но может ли это быть достигнуто без создания новой таблицы?

ответ

0

Попробуйте

validate :unique_talk_in_conference 
def unique_talk_in_conference 
    if self.conference.talks.collect(&:title).include?(self.title) 
     errors.add(:title, "Talks should be unique in a conference") 
    end 
end 

P.S: Я не проверял это