有问题的3个型号。停电,儿童,关系。
停电可能会有很多孩子。 一个孩子属于停电。 关系是中间人表。
一个孩子一次只能属于一次停电(即,如果孩子123属于停电A,你不能将孩子123与不同的停电联系起来)
每次停电中的孩子必须是独一无二的。 (我在validates_uniqueness_of
模型中使用Relationship
解决了这个问题。
class Outage < ApplicationRecord
has_many :relationships
has_many :children, :through => :relationships
end
class Child < ApplicationRecord
has_many :relationships
has_many :outages, :through => :relationships
end
class Relationship < ApplicationRecord
belongs_to :outage
belongs_to :child
validates_uniqueness_of :outage_id, :scope => :child_id
end
我尝试设置一个自定义验证器(在child.rb
中):
def has_one_outage
if outages.length > 1
errors.add(:base, "a child can only belong to one outage at a time")
end
end
但验证似乎没有影响。
对我在这里做错了什么的见解?
答案 0 :(得分:0)
能够通过以下方式解决问题:
class Outage < ApplicationRecord
has_many :relationships
has_many :children, through: :relationships
end
class Child < ApplicationRecord
has_many :relationships
has_many :outages, through: :relationships
end
class Relationship < ApplicationRecord
belongs_to :child
belongs_to :outage
validate :ensure_one_relationship
def ensure_one_relationship
if Relationship.where(child_id: self.child_id).present?
errors.add(:base, "A trouble ticket can only be associated with one outage ticket.")
end
end
end