Rails 4单选按钮形成帮助,真的没有验证

时间:2013-10-01 14:45:46

标签: ruby-on-rails validation radio-button

我有简单的是或否附加的单选按钮:needs_dist。当我提交没有选择的表单时它工作得很好,但是当我选择了Yes时,它会抛出一个错误进行验证?它仅在以下时间验证:needs_dist =>真。

模型

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 个答案:

答案 0 :(得分:7)

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

  validates :needs_dist, inclusion: [true, false]

答案 1 :(得分:3)

在您的模型中,您定义:need_dist属性必须存在a.k.a.而不是false,而不是nil

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

<强>更新 我找到了另一种方法来实现你想要的。我写了解决方案 here

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

答案 2 :(得分:0)

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

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