2012-03-29 14 views
4

私は3つのモデルを持っています。販売、商品、画像。私は、販売が作成されたときに、販売ごとに少なくとも3枚の写真と1つ以上の商品があることを確認したいと思います。これを達成する最良の方法は何でしょうか?Railsは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

もう1つの方法は、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 

は、あなただけのデフォルトのメッセージは文字カウントに言及しているとして、独自のメッセージを提供する必要があります。

関連する問題