Rails验证:如果有复选框

时间:2012-08-15 14:14:37

标签: ruby-on-rails validation activerecord

我正在使用包含2个复选框的表单:option_oneoption_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

我的方法是否正确?我怎样才能做到这一点?提前谢谢。

2 个答案:

答案 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,因此您应该使用createupdate_attributes或手动将该值从控制器分配给模型。如果要保留option_two字段,那么它应该是数据库列,否则您只需创建属性访问器:

attribute_accessor :option_two