0
我有一个模型,Offer
,属于User
。用户有一个属性:prepaid_amount
,表示金额,而:bid_total
是项目上所有金额的总和乘以每个出价的数量。因此,有两份标书,一个与quantity => 3
和amount => 10
,另一个与quantity => 2
和amount => 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
我想这是我的下一步,如果它解决了这个问题。不知道我看到了我想要做的那些复杂的事情......但我会给它一个机会。 – 2011-06-13 13:08:31
validates:qty,:numericality => {:less_than => Proc.new {| offer | (offer.user.prepaid_amount-offer.user.bid_total)/offer.amount}}会做到这一点...... – 2011-06-13 15:34:08
复杂的我只是说它已经成为尝试使用内置验证将各种验证部件焊接在一起的练习工具。 – jaydel 2011-06-13 23:27:17