2016-01-20 55 views
2

我有單選按鈕,我想用它來保存考勤信息保存在數據庫中無:在HAML 是,不,也許如何使用單選按鈕

代碼:數據庫

= f.input :attendee, :as => :radio, :collection => { "Yes" => true, "No" => false, "Maybe" => nil }, :label => "Attendence:" 

現場與會者是布爾類型。 當我將值從Yes/No更改爲Maybe時,rails沒有在數據庫中保存'nil'。我應該怎麼做,以節省「零」

+1

您是否爲遷移者設置了默認值?如果是,那麼它將永遠不會保存nil值否則它將會爲 – chaitanya

+0

我將nil設置爲參加者的默認值 – schadock

+0

您可以添加(在對您的問題進行編輯時)提交表單時可能填寫「Maybe」的參數?它將在你的日誌中。 –

回答

1

Boolean is true/false,你不能有nilnil作爲假處理的):

在計算機科學中,布爾數據類型是一種數據類型,具有兩個值(通常表示真實假)。 [如果不是真,假]

你會用更好的enum

#app/models/model.rb 
class Model < ActiveRecord::Base 
    enum attendee: [:yes, :no, :maybe] 
end 

這比使用boolean稍微臃腫,但保留data integrity(你會必須破解Rails布爾值才能將它識別爲nil,作爲maybe)。 Enumintegers,每個enum由一個數字代表...

yes = 0

no = 1

maybe = 2

這樣一來,你可以做以下:

= f.input :attendee, as: :radio, collection: Model.attendees, :label => "Attendence:" 
+0

謝謝Rich,好點 – schadock

+1

完美解釋,謝謝 – chaitanya

+0

無論好壞,如果添加一個布爾類型的列,默認情況下,空值通常被接受。 –

2

如果布爾值設置默認爲true或false,那麼它不會接受空值,否則如下建議你可以傳遞空值布爾領域。

= f.input :attendee, :as => :radio, :collection => { "Yes" => true, "No" => false, "Maybe" => "" }, :label => "Attendence:" 
+1

在客戶端上可能會更改值,因此您不希望將您的域邏輯基於客戶端值。因爲op提到他已經將默認值設置爲nil - 只需接受params並過濾掉任何不是真或假的值。 ''' 高清attendee_params PARAMS。許可證(attendence:[「1」,「2」]) #不記得strong param api,所以你必須檢查它 end ''' – pkurek