2016-07-10 50 views
1

我在軌道has_many:照片中有產品模型。我想添加驗證,以確保在不添加照片的情況下無法創建產品。我曾嘗試在照片模型中添加validates_attachment_presence:圖像,但產品模型仍未保存照片。我如何驗證圖像?我也希望用戶至少添加5張照片你如何驗證軌道中的照片

//product model 
class Product < ActiveRecord::Base  
    has_many :photos 
end 

//photo model 
class Photo < ActiveRecord::Base 
    belongs_to :product 
    validates_attachment_presence :image 
end 

回答

0

由於您沒有發佈您的表格架構,我試圖猜測它。

然後,驗證的照片presence/format可以使用validation-helpers和檢查的照片的最小數量,你可以創建一個自定義的驗證是這樣的:

class Product < ActiveRecord::Base 
    has_many :photos 
    before_save :images_limit_min 

    private  
    def images_limit_min 
     return if self.photos.empty? 
     errors[:base] << "You must to upload at least 5 images" if self.photos.length < 5 
    end 
end 

class Photo < ActiveRecord::Base 
    belongs_to :product 
    validates :product_id, presence: true, format: { with: %r{ \.(png|jpg|jpeg)$ }i, message: "custom message" } 
end 

注:結構可能不完全正確,但我希望你有你應該去的方式。

+0

這是行不通的;如果產品has_many照片,那麼它是具有product_id的照片,而不是其他方式。編輯:雖然,images_limit_min是在正確的軌道上;它只是驗證:photo_id不起作用的部分 – philomory

+0

@philomory好點的人..這是因爲很難在你的前臺沒有任何項目的情況下抽象所有東西:D我認爲如果我將驗證移動到'照片'它應該工作。 – developer033

+0

這會起作用,可能是一個好主意,但不直接解決OP的問題;它確保你不能有一張與任何產品沒有關聯的照片,這通常是(但並非總是)你想確保的東西,但實際上並沒有被問題提及。 – philomory