2010-07-13 46 views
0

我有模型order.rb,line_items.rb - 其中line_item屬於訂單。我已經添加了自定義的驗證,因爲這樣命令應該只有line_items所有相同MERCHANT_IDRails驗證 - 生成錯誤,但記錄仍保存

我的問題是:它似乎驗證工作正常 - 我能夠得到它時違反錯誤,但是「line_item」記錄仍然可以在任何情況下保存。任何想法?

Order.rb

validate_on_update :only_one_merchant 

def only_one_merchant 
     merchants = [] 
     for line_item in self.line_items 
      merchants << line_item.product.merchant_id 
     end 
     merchants = merchants.uniq 
     errors.add(:line_items, "You could only order from one same merchant at time") if merchants.length > 1 
    end 

Order.rb加入LINE_ITEM

current_item = LineItem.new(:quantity => quantity) 
    current_item.variant = variant 
    current_item.price = variant.price 
    self.line_items << current_item 

回答

0

validate_on_update將檢查驗證,只有當你更新任何記錄來驗證anycondition使用記錄validate

Chnage

validate_on_update :only_one_merchant 

validate :only_one_merchant 

&檢查是否正常工作與否

+0

喜薩里爾,它沒有工作 – iwan 2010-07-13 12:12:37

0
validate :only_one_merchant 

def only_one_merchant 
     merchants = [] 
     for line_item in self.line_items 
      merchants << line_item.product.merchant_id 
     end 
     merchants = merchants.uniq 
     errors.add(:line_items, "You could only order from one same merchant at time") if merchants.length > 1 
    end 

這將解決你的問題,第一,這些函數調用,然後更新

+0

嗨,感謝您的回覆,但我不清楚..你能改說嗎?謝謝 – iwan 2010-07-13 12:11:51