2017-02-16 8 views
1

私はrespondingという属性のオブジェクト@recipientを持っています。いいえ、responding=f.check_box :responding, {}, 'Yes', 'No'で「はい」または「いいえ」を保存したいとします。docsと指定できます。Rails check_boxフォームヘルパーで 'true'または 'false'の代わりに 'Yes'または 'No'を保存するには?

フォームはYesまたはNoを提出し、期待通りにPostgreSQLのUPDATEステートメントは、(私は$ rails serverターミナルウィンドウであることを参照してください)YesまたはNoを使用しています。しかし、responding属性のデータ型(ブール値または文字列)に関係なく、最終的にdbに格納される値はtrueまたはfalseです。私は困惑している。舞台裏では何が起こっているのですか?どのようにしてRailsにYesまたはNoを保存させることができますか?私(ない)か?私は何かを誤解していますか? fine manualから

+0

d/bスキーマの「応答」フィールドはどのデータ型ですか? – margo

+0

'responding'属性はdbの文字列フィールドです。 – Arta

+0

それは文字列ですか?テーブルのスキーマはどのように見えますか? –

答えて

3

8.6。ブール型
[...] "真" の状態のため
有効なリテラル値は次のとおり、次の値を使用することができ、 "偽" 状態の場合

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

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

したがって、と'no'の文字列は、それぞれtruefalseの有効なエイリアスです(SQLの場合)。

ブール値の列を'yes'に設定すると、Railsの値にアクセスするときにtrueに戻ります。 'yes'TRUEのエイリアスで、RailsはRubyのtrueを持つTRUE SQLブール値を表します。 'no'およびfalseについても同様です。

あなたは、データベース内の自分のブール値の具体的な表現を心配するのではなく、あなたのモデルを表示するとき'Yes''No'truefalse Rubyの値を翻訳する方がいいでしょう。


実際に適用されるかどうかは、サーバーの再起動と実際の列の種類が混乱しているため、わかりません。私はこれを元に戻したので、OPは別の読み込みが必要でした。

1

だから、あなたは

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

が通常form_for @recipientで使用している場合、それはあなたの価値を持つ1つのチェックボックスを提示しなければならないそう。 check_boxがチェックされている場合、保存された値は「Yes」です。使用:列の文字列。未チェックの値が 'no'の場合 これは通常の手順です。さて、私が見ることのできるのは、check_boxの代わりにcheckboxを使うということだけです。

データ型は文字列である必要があります。ブール値ではなく文字列を使用していますか?ブール値を使用すると、trueを保存します。変更後に適切に移行しましたか?schema.rb ...を確認しましたか? しかし、私は助けようとしていますが、これがあなたのためにうまくいかない場合、私はその問題がどんなものか分かりません。 これが役立つことを願っています。がんばろう!

+0

正しく移行されました。それはブール値に対してどのようにふるまうか見るために前後に数回。 'checkbox'はここでタイプミスですが、修正します。サーバーを再起動すると問題が解決しました(驚いたことに、通常は移行後にサーバーを再起動しません)。今は期待どおりに動作します。ありがとうございました。 – Arta

+1

移行を実行した後は、常にサーバーを再起動する必要があります。 – margo

関連する問題