2011-03-03 5 views
0

has_one 연관 속성에 대해 유효성 검사를 수행하고 오류 구조에 오류 메시지를 삽입하려면 어떻게해야합니까?ruby ​​on rails - has_many 속성 유효성 검사

"셔츠"또는 "바지"에 오류가 발생한 경우 어떻게 그 오류에 액세스 할 수 있습니까? 오류가 발생합니다 person.shirt.errors [: color]?

나는 person.save를 트리거 할 때 person.shirt에 대한 유효성 검증을 활성화합니까?

person.save를 트리거 할 때 person.shirt에 오류가있는 경우 오류 메시지가 저장되는 위치는 어디입니까? 개인적으로. 셔츠. 실수 또는 직접. 오류? 당신이 person.save를 호출 할 때

class Person < ActiveRecord::Base 
     has_one : shirt 
     has_many : pants 
     validates :name, :presence => true 
     validates_length_of :name, :minimum => 3 
end 

person = Person.new(:name => "JD") 
person.shirt.create(:color=> "red") 
person.pants.create(:type=> "jeans") 
person.valid? 
+0

몇 가지 이유로 이전 답변에 댓글을 추가 할 수 없어 여기에 내 댓글을 쓰고 있습니다. edgarjs (또는 다른 사람),이 방식에 대한 마지막 질문입니다. 오류가 바지 [2] .color 내에 있으면 오류는'person.errors.at (: shirt [2] .color)'또는'person.errors.at (: shirt [2])에 나타날 것입니다 '아니면 두 가지 경우 모두를 우선 할 것인가? 어떻게 has_many 연관 개체의 오류 메시지가 표시됩니까? thx – batz107

답변

2

당신은 shirt의 검증을 트리거

validates_associated :shirt 

와 그 방법을 모델의 연결을 확인할 수 있습니다.

네, 협회의 오류에로 액세스 할 수 있지만 유효성 검사를 실행 한 후에해야합니다. 예 :

person = Person.new 
person.errors # => will be empty 

유효성 검사가 아직 실행되지 않았기 때문입니다. 따라서 save 또는 valid? 또는 유효성 검사를 트리거하는 다른 방법 중 하나를 호출해야합니다.

person = Person.new 
person.valid? 
person.errors # => will have errors in person 

그리고 협회에 대한 동일합니다 :

person.shirt.valid? 
person.shirt.errors 

하지만 validates_associated으로 연결을 검증하고 이후이 셔츠의 유효성 검사를 트리거 할 person.valid? 충분히 될 것입니다.

+0

edgarjs thx에 대한 응답입니다. 오류가 셔츠에 있다면, 그것도 개인적으로 나타날 것입니다. 오류? – batz

+0

edgarjs, 내 의견을보기 위해 변경 했습니까? – batz

+0

죄송합니다. 의견을보세요. 만약 에러가 셔츠 안에 있다면, 그것은 "셔츠가 유효하지 않은"것으로 나타나지만 더 자세한 것은 아니지만 항상'person.shirt.errors'에 접근하여 셔츠의 오류를 얻을 수 있습니다. – edgarjs