2017-02-16 42 views
1

我有一個對象@recipient,屬性responding。說,我希望responding通過=f.check_box :responding, {}, 'Yes', 'No'存儲「是」或「否」,其中docs表示可能。如何使用Rails check_box表單助手保存'是'或'否'而不是'true'或'false'?

表單提交YesNo和PostgreSQL UPDATE語句使用YesNo如預期(I看到,在$ rails server終端窗口)。但是 - 無論responding屬性的數據類型(布爾值還是字符串) - 存儲在db中的數據總是truefalse。我很困惑。幕後發生了什麼?我如何強制Rails存儲YesNo?我應該(不)?我誤解了什麼嗎?

+0

什麼數據類型是您的d/b模式中的「響應」字段? – margo

+0

「響應」屬性是數據庫中的字符串字段。 – Arta

+0

你確定它是一個字符串嗎?表的模式是什麼樣的? –

回答

3

fine manual

8.6。布爾類型
[...]
爲 「真」 的有效文本值是:

TRUE 
't' 
'true' 
'y' 
'yes' 
'on' 
'1' 

對於 「假」 的狀態,下面的值可以使用:

FALSE 
'f' 
'false' 
'n' 
'no' 
'off' 
'0' 

因此,字符串'yes''no'分別是SQL中的truefalse(分別)的有效別名。

如果你設置一個布爾列到'yes'那麼當你訪問Rails中的值時,你會得到true'yes'是SQL中的TRUE的別名,Rails表示SQL的TRUE SQL布爾值,其值爲true。同樣對於'no'false

你最好翻譯truefalse紅寶石值'Yes''No'當你顯示你的模型,而不是擔心數據庫中的布爾值的具體表現。


不知道這是否真的適用,因爲已經對服務器重新啓動,什麼列類型還真是有些混亂。 OP要另一次閱讀,所以我沒有取消這個。

1

所以,如果你使用

=f.check_box :responding, {}, 'Yes', 'No' 

與正常form_for @recipient它應該爲您呈現其值爲一個複選框是的。如果選中check_box,則保存的值爲'是'。使用:字符串作爲列。如果未檢查的值是'否'。 這將是正常的程序。那麼,我只能看到你使用複選框而不是check_box。

它應該是數據類型:字符串。你確定你正在使用:字符串,而不是布爾?如果你使用布爾值,它將保存爲真。您是否在更改後正確遷移並檢查了schema.rb ... 但是,我只是想幫助,但如果這不適合你,我不知道問題可能是什麼。 希望這有助於。祝你好運!

+0

我正確遷移;來回幾次,看看它是如何表現布爾。 'checkbox'在這裏是一個錯字,我會糾正它。這個問題在我重新啓動服務器後自行解決(令人驚訝的是,通常我不會在遷移後重新啓動服務器)。它現在的行爲如預期。謝謝。 – Arta

+1

運行遷移後,應始終重新啓動服務器。 – margo

相關問題