2012-03-29 7 views
4

세 가지 모델이 있습니다. 판매, 항목 및 이미지. 판매가 생성 될 때 판매 당 최소 3 장의 사진과 하나 이상의 품목이 있음을 확인하고 싶습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까?레일스 accepts_nested_attributes 카운트 유효성 확인

판매 모델 :

class Sale < ActiveRecord::Base 
    has_many :items, :dependent => :destroy 
    has_many :images, :through => :items 

    accepts_nested_attributes_for :items, :reject_if => lambda { |a| a[:title].blank? }, :allow_destroy => true 
end 

항목 모델 :

class Item < ActiveRecord::Base 

    belongs_to :sale, :dependent => :destroy 
    has_many :images, :dependent => :destroy 

    accepts_nested_attributes_for :images 

end 

이미지 모델 :

class Image < ActiveRecord::Base 
    belongs_to :item, :dependent => :destroy 
end 

답변

6

는 판매 모델 추가 someth에서

의 유효성을 확인하는 사용자 정의 방법을 만들기 이런 식으로 :

희망이 모든 행운과 행복 코딩에 도움이 되길 바랍니다.

+2

이러한 메소드의 이름을 validate_item_count 및 validate_image_count로 지정하는 것이 이상적입니다. 이는 사용자의 의도를 명확히하고 메소드가 오류를 추가하기 때문입니다. – joelparkerhenderson

+0

좋은 점, 추가해 주셔서 감사합니다. – digicazter

2

또 다른 옵션은 length 유효성 확인과 함께이 작은 트릭을 사용하고 있습니다. 대부분의 예는이 텍스트로 사용되는 표시하지만, 그것은뿐만 아니라 협회의 길이를 확인합니다 :

class Sale < ActiveRecord::Base 
    has_many :items, dependent: :destroy 
    has_many :images, through: :items 

    validates :items, length: { minimum: 1, too_short: "%{count} item minimum" } 
    validates :images, length: { minimum: 3, too_short: "%{count} image minimum" } 
end 

당신은 기본 메시지는 글자 수를 언급으로 당신의 자신의 메시지를 제공해야합니다.