我有简单的是或否附加的单选按钮: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
答案 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 %>