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

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

模型

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

视图

     

控制器(以防万一)

 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 

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

  validates :needs_dist, inclusion: [true, false] 

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

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

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

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

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

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