2016-11-10 16 views
0

Talk,TopicおよびConferenceの3つのモデルがあります。 それぞれタイトルと説明があります。 Conferenceには多くの話があるTopicsTopicが多数あります。私はTalkConference内で一意のタイトルを持っていることを検証するにはどうすればよいスコープ付きフィールドの一意性を確認する:関連付け

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 - 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をお試しください:私はそれを

をテストしていません
関連する問題