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
4

3 回答 3

9

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

  validates :needs_dist, inclusion: [true, false]
于 2013-10-01T15:18:00.490 回答
3

在您的模型中,您定义该:need_dist属性必须存在,也就是 not false, notnil

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

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

validates :needs_dist, :presence => { :if => 'needs_dist.nil?' }
于 2013-10-01T15:16:29.483 回答
0

您也可以使用 1 和 0 来表示真假,但是您必须与整数而不是布尔值进行比较(因为 Ruby 中的 0 == true)。不过,我真的很喜欢 Buttercup 的回答。但是我想我会选择 Lazaru 的解决方案。

<%= f.radio_button :needs_dist, 0 %>
<%= f.radio_button :needs_dist, 1 %>
于 2015-09-04T00:22:26.070 回答