我正在使用包含2个复选框的表单:option_one
和option_two
。
如果选中option_two
并且option_one
未选中,我不想允许提交表单。
换句话说,如果有人检查option_two
,他们也必须检查option_one
。
所以在MyModel中我写道:
validates :option_one, :presence => true, :if => option_two_active?, :message => "Dummy message."
然后在MyController中,我添加了:
def option_two_active?
params[:option_two] == "1"
end
但它一直给我以下错误:
NoMethodError in MyController#index
我的方法是否正确?我怎样才能做到这一点?提前谢谢。
答案 0 :(得分:2)
引用该方法的方式,将在首次加载类时直接调用它。但是,:if
参数应与proc一起使用,然后在验证期间调用proc或使用表示方法名称的符号。在您的情况下,您应该这样设置验证:
validates :option_one, :presence => true, :if => :option_two?, :message => "Dummy message."
注意方法名称前面的冒号。此外,验证方法需要在模型上定义,而不是在控制器上定义。幸运的是,ActiveRecord已经为这里使用的布尔字段定义了正确的方法。
答案 1 :(得分:2)
您必须使用符号
指定条件方法validates :option_one, :presence => true, :if => :option_two_active?, :message => "Dummy message."
此外,由于您无法使用模型中的params
,因此您应该使用create
,update_attributes
或手动将该值从控制器分配给模型。如果要保留option_two
字段,那么它应该是数据库列,否则您只需创建属性访问器:
attribute_accessor :option_two