Rails 4单选按钮表单辅助程序,true无法验证

6

我有一组简单的是或否单选按钮与 :needs_dist 相关联。当我提交表单并选择“否”时,它可以正常工作,但当我选择“是”时,会出现验证错误?只有当 :needs_dist => true 时才进行验证。

模型

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
3个回答

9

我发现更好的true false验证方法是包含。因此,您的验证可能如下:

  validates :needs_dist, inclusion: [true, false]

3
在您的模型中,您定义了:need_dist属性必须存在,也就是不能为falsenil
由于您将“false”值分配给了“Yes”单选按钮,因此此验证失败。 更新:我找到了另一种实现您所需功能的方法。我在这里写了解决方案。
validates :needs_dist, :presence => { :if => 'needs_dist.nil?' }

0

你也可以使用1和0代替true和false,但这样你就需要与整数进行比较而不是布尔值(因为在Ruby中0==true)。尽管我真的很喜欢Buttercup的回答,但我认为我会选择Lazaru的解决方案。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接