我刚遇到Validate presence of field only if another field is blank - Rails已接受的解决方案尚未完成的情况。
我想要存在两个字段中的一个或两个,但在我的情况下,字段points
中的一个字段需要是0到10之间的数字。在点字段为零的情况下{ {1}}评估为false,空白评论被视为无效。我通过指定:points?
:
:points.blank?
这似乎有效(我可以保存第一个条目0点而没有评论)但是在后续保存中我从控制器那里得到了奇怪的错误:
NoMethodError(未定义的方法'验证'表示false:FalseClass): app / controllers / comments_controller.rb:8:在'创建'
我需要对验证做些什么吗?我是否需要使用lambda(如链接问题的一些答案所示)?
答案 0 :(得分:2)
:points.blank?
计算为false
,其被设置为哈希中:unless
项的值。您需要为:unless
选项指定方法名称或Proc。您可以简化整个设置:
validates :comment, presence: true, on: :create, if: :points?
validates :points, numericality: :only_integer, inclusion: 0..10
答案 1 :(得分:0)
不确定你是如何获得第一个记录的,但这不是正确的语法:
验证:评论,在场:{除非:: points.blank?,on :: create}
相反,您应该在模型中定义这样的方法:
def points_blank?
# your code for zero handling
#
end
然后使用该方法,除非像这样:
validates :comment, presence: { unless: :points_blank?, on: :create }