2013-10-01 77 views
4

我擁有簡單的yes或no單選按鈕:needs_dist。當我提交沒有選擇的表單時,它工作得很好,但是當我選擇了Yes時,它會拋出一個驗證錯誤?它僅在以下情況下進行驗證:needs_dist => true。Rails 4單選按鈕表單助手,真正不驗證

型號

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 

回答

6

更好的驗證真假我發現是包含。所以,您的驗證可能是:

validates :needs_dist, inclusion: [true, false] 
+0

這工作完美,謝謝! –

3

在模型中定義的:need_dist屬性必須存在又名不false,不nil

由於您已將「false」值分配給「Yes」單選按鈕,因此此驗證失敗。

更新: 我找到了另一種方法來完成你想要的。我寫了解決方案 here

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

此外,感謝您的解釋,這是非常有道理的。 –

0

您還可以使用真假1和0,但你必須用整數代替布爾值進行比較(因爲0 ==在Ruby中如此)。雖然我真的很喜歡Buttercup的回答。不過我想我會選擇Lazaru的解決方案。

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