2013-10-01 47 views
4

我拥有简单的yes或no单选按钮:needs_dist。当我提交没有选择的表单时,它工作得很好,但是当我选择了Yes时,它会抛出一个验证错误?它仅在以下情况下进行验证:needs_dist => true。Rails 4单选按钮表单助手,真正不验证

型号

validates_presence_of :contact_name, :email, :postal_code, :series_id, :product_id, :company_name, :needs_dist 

查看

<%= f.radio_button(:needs_dist, "false") %> 
<%= f.label :needs_dist, "Yes" %> 
<%= f.radio_button(:needs_dist, "true") %> 
<%= f.label :needs_dist, "No" %> 

控制器(以防万一)

def create_quote 
    @quote_request = QuoteRequest.new safe_quote_params 

    if @quote_request.save 
     @email = SiteMailer.quote_request(@quote_request).deliver 
     render :template => "request/quote_sent" 
    else 
     @series = Series.find params[:quote_request][:series_id] unless params[:quote_request][:series_id].blank? 
     render :template => "request/quote.html" 
    end 
    end 

回答

6

更好的验证真假我发现是包含。所以,您的验证可能是:

validates :needs_dist, inclusion: [true, false] 
+0

这工作完美,谢谢! –

3

在模型中定义的:need_dist属性必须存在又名不false,不nil

由于您已将“false”值分配给“Yes”单选按钮,因此此验证失败。

更新: 我找到了另一种方法来完成你想要的。我写了解决方案 here

validates :needs_dist, :presence => { :if => 'needs_dist.nil?' } 
+0

此外,感谢您的解释,这是非常有道理的。 –

0

您还可以使用真假1和0,但你必须用整数代替布尔值进行比较(因为0 ==在Ruby中如此)。虽然我真的很喜欢Buttercup的回答。不过我想我会选择Lazaru的解决方案。

<%= f.radio_button :needs_dist, 0 %> 
<%= f.radio_button :needs_dist, 1 %>