0
3 모델. 정전, 아동, 관계.Rails 5 Model Association has_many : through, validate 자식은 한 부모에만 속할 수 있습니다.
작동이 중단되면 많은 아이들이있을 수 있습니다. 어린이가 정전에 속합니다. 관계는 중개자 테이블입니다.
아이는 각 장애의 아이들이 고유해야합니다
(아이 123이를 정전에 속하는 경우, 다른 장애와 연관 아이 (123) 기운, 즉) 한 번에 하나의 정전에 속할 수 있습니다. (Relationship
모델에서 validates_uniqueness_of
으로 해결했습니다.)
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
검증은 그래도 영향을 미치는 것 같다하지 않습니다.
내가 여기서 잘못하고있는 것에 대한 통찰력이 있습니까?
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
왜 당신이 다음 대신 has_many''의'has_one'을 사용할 수 없습니다 – potashin
'Child' 모델에서'has_one : relationship'과'has_one : stopped, : through => : relationship'을 사용하지 않으시겠습니까? [Rails 안내서] (http://guides.rubyonrails.org/association_basics.html#the-hasone-association)는이 연관성을 설명합니다. –
@TomAranda 맞아, 내가 생각했던거야. 그것을 시도했지만 여전히 아이들이 다른 정전과 관련 지을 수 있습니다. – DnfD