【发布时间】:2013-11-08 20:39:46
【问题描述】:
在编写一个浮动属性验证时,我偶然发现了一个我总是想验证数值,但在某些情况下只允许_nil 的情况。
目前我的解决方案通常是允许_nil,但随后编写单独的存在验证。
validates :price, numericality: { greater_than: 0 }, allow_nil: true
validates :price, presence: true,
if: Proc.new { |v| v.voting.fan_priced? }
这可行,但似乎不干净。理想情况下,我想要这样的东西(一种伪代码):
validates :price, numericality: { greater_than: 0 },
allow_nil: Proc.new { |v| v.voting.fan_priced? ? false : true }
但这显然行不通。
有什么方法可以更有效地做到这一点?我还找到了this here on SO,但这似乎很相似,本质上对同一事物使用了两个单独的验证。
PS:不知何故,我的验证过程搞乱了我的应该匹配器。像
这样简单的东西it { should_not allow_value(0).for(:user_id) }
在同一个模型现在给我
undefined method `fan_priced?' for nil:NilClass
should matchers 不能处理 procs 中的关联吗?
【问题讨论】:
标签: ruby-on-rails validation activerecord