2009-09-14 94 views
1

的給定數量的:驗證關聯對象

class User < ActiveRecord::Base 
    has_many :photos 
    MAX_PHOTOS = 5 
    validate :quantity_of_photos 

    def quantity_of_photos 
    ??? 
    end 
end 

這:

@user.photos.size # => 5 

我需要這個失敗:

@user.photos << Photo.create(valid_photo_attributes) 

如何做到這一點的驗證?

回答

1

移動照片的方法的數量在照片模式:

class Photo < ActiveRecord::Base 

    belongs_to :user 
    validates :quantity_of_photos 

    def quantity_of_photos 
     if new_record? && user.photos.size >= User::MAX_PHOTOS 
     errors.add_to_base "You cannot have more than #{MAX_PHOTOS} photos." 
     end 
    end 

end 

一個ActiveRecord的實例的有效性是由是否有它的錯誤陣列錯誤決定。

+0

您的方法導致@user未通過驗證,但這並不完全。我需要這個@user.photos << Photo.create(valid_photo_attributes)產生一個錯誤。否則,可以將照片成功關聯到成員,直到在代碼稍後的某個時間點進行驗證。更好的是,他們不能首先與其相關聯。 – Gavin 2009-09-15 08:23:17

+0

好吧,編輯回答你的問題更好 – Ben 2009-09-15 13:22:50

+3

這樣做,但它是糟糕的設計。它要求照片瞭解會員和任何其他有照片且需要類似驗證的模型的情況。 – Gavin 2009-09-18 10:21:02