验证作用域的唯一性:通过关联

时间:2016-11-10 19:11:13

标签: ruby-on-rails validation associations

有3种型号:TalkTopicConference。 每个都有标题和描述。 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是否具有唯一标题?

我能想到的唯一解决方案是为Talk - Topic关联创建另一个表并在那里执行验证。但是这可以在不创建新表的情况下实现吗?

1 个答案:

答案 0 :(得分: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:我没有测试它