现在validates
优先于validates_presences_of
等。正如 hyperjas 提到的,您可以这样做:
validates :shipping_cost,
:shipping_cost_anywhere,
:presence => true, :if => :shipping?
:shipping_cost
但是,这会限制和的整个验证:shipping_cost_anywhere
。validate
为了更好的可维护性,我更喜欢为每个属性单独声明。
更重要的是,您可能会遇到多个验证条件不同的情况(例如一个用于存在,另一个用于长度、格式或值)。你可以这样做:
validates :shipping_cost,
presence: { if: :shipping? },
numericality: { greater_than: 100, if: :heavy? }
你也可以让 rails 评估一个 ruby 字符串。
validates :shipping_cost,
presence: { if: "shipping?" },
numericality: { greater_than: 100, if: "shipping? and heavy?" }
最后,可选择添加单独的自定义消息:
validates :shipping_cost,
presence: { if: "shipping?", message: 'You forgot the shipping cost.' },
numericality: { greater_than: 100, if: "shipping? and heavy?", message: 'Shipping heavy items is $100 minimum.' }
等等。希望有帮助。