モデルに :birth_time というフィールドがあり、3 つのフォーム フィールドから構築しようとしていますが、かなり苦労しています。私は2つの異なるアプローチを試みました。これは、私の最初のアプローチでのフォームのスニペットです。
<input type="text" class="span1" name="birth_time_hour" id="birth_time_hour" placeholder="hour">
<input type="text" class="span1" name="birth_time_minute" id="birth_time_minute" placeholder="minute">
<select name="birth_time_meridiem" id="birth_time_meridiem" class="span1">
<option value="am">AM</option>
<option value="pm">PM</option>
</select>
そして私のモデル:
attr_accessible :birth_time
コントローラーでやりたいことは、これら 3 つのフォーム値を取得し、Time オブジェクトを作成して、保存する前に Pick.birth_time に設定することです。params["birth_time_hour"] の計算に問題があります。PM の場合は、Time オブジェクトを作成する前に 12 を追加します。
params["birth_time_hour"] + 12
結果は にcan't convert Fixnum into String
params["birth_time_hour"].to_i
なりますexception class/object expected
。
最初にフォーム値からオブジェクトを作成する必要がありますか?
私の 2 番目のアプローチは、attr_accessible 値をモデルに追加することでした。ただし、実際にはデータベースに格納されていません。
attr_accessible :birth_time_hour, :birth_time_minute, :birth_time_meridien, :birth_time
そして、私のフォームで(simple_formを使用して):
<%= f.input :birth_time, :label => "Birth time:", :as => :tel, :input_html => { :class => 'span2' }, :placeholder => 'hour' %>
しかし、フォームをレンダリングしようとすると、それはただ爆撃します:
undefined method `birth_time_hour' for #<Pick:0x0000010657c248>
attr_accessible を使用できない理由がよくわかりません。以前はフォームにのみ存在し、データベースには存在しないパスワードフィールドで使用しました。
編集: attr_accessible と attr_accessor をbirth_time_hourに使用すると、うまく機能するようです。少なくともフォームを作成できますが、コントローラーの Pick オブジェクトの一部としてはまだ表示されません。attr_accessor とそれが何に使用されるかについての知識はほとんどありませんが、それは明らかです。
一見単純な問題を解決する方法についてのアイデアはありますか? データベースに 3 つの値すべてを保存することを提案する他の SO スレッドを読みましたが、これはすべて私に出てくるのでばかげているようです。そうでないことを心から願っています。