2011-06-11 98 views
0

我有一個模型,Offer,屬於User。用戶有一個屬性:prepaid_amount,表示金額,而:bid_total是項目上所有金額的總和乘以每個出價的數量。因此,有兩份標書,一個與quantity => 3amount => 10,另一個與quantity => 2amount => 3用戶,有36rails 3關係驗證

如果prepaid_amount是大於這個值的bid_total,一切都很好。假設prepaid_amount爲40.

如果我想驗證用戶的新出價quantity => 1,那麼出價金額可以是大於0且大於4的任何整數。如果它爲零,則1 * 0,並且驗證應該失敗,因爲出價必須大於零。如果金額是(比如說)5,則出價不應該被驗證,因爲36 + 1 * 5 = 41,這大於prepaid_amount

如何在Offer模型中的Rails 3中創建這樣的驗證?這是我有什麼,這是行不通的:

class Offer < ActiveRecord::Base 

    belongs_to :user 

    validates :user_id, :presence => true, :numericality => true do 
    validates :qty, :presence => {:if => Proc.new { |offer| (offer.user.prepaid_amount-offer.user.bid_total)/offer.amount >= offer.qty} } 
    end 


end 

回答

0

你有沒有考慮過使用自定義驗證方法?

validates_with :my_custom_validation_method 

def my_custom_validation_method 
    ...your code to validate... 
end 

可能有人會說,這不是驗證的完美軌的方式,但如果您的驗證是如此複雜,你可能會考慮在自己的方法隔離。

+0

我想這是我的下一步,如果它解決了這個問題。不知道我看到了我想要做的那些複雜的事情......但我會給它一個機會。 – 2011-06-13 13:08:31

+0

validates:qty,:numericality => {:less_than => Proc.new {| offer | (offer.user.prepaid_amount-offer.user.bid_total)/offer.amount}}會做到這一點...... – 2011-06-13 15:34:08

+0

複雜的我只是說它已經成爲嘗試使用內置驗證將各種驗證部件焊接在一起的練習工具。 – jaydel 2011-06-13 23:27:17