Rails 3.2.4.rc1 Ruby 1.9.3 Formtastic 2.1 (安定版)
formtastic を使用してユーザー情報フォームを実行しようとしています。日付フィールドが正しく機能していないようです。他のすべてのデータは正しく更新されています。PUT リクエストは問題ないように見えますが、データベース (mysql) にクエリを実行すると、日付 = NULL と表示されます。
コード例:
私の見解から:
<%= semantic_form_for @author do |f| %>
<%= f.inputs do %>
<%= f.input :first_name %>
<%= f.input :last_name %>
<%= f.input :date_of_birth, :start_year => Time.now.year-500 %>
<%= f.input :nationality %>
<%= f.input :bio %>
<% end %>
<%= f.actions %>
<% end %>
PUT リクエスト:
Started PUT "/authors/4" for 127.0.0.1 at 2012-07-19 11:08:02 -0400
Processing by AuthorsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"UARYU7S0FTOLYU1Z04lZp/2Gn94DXiKuX/FN/DgYk/c=", "author"=>{"first_name"=>"Sheila", "last_name"=>"Wedigo", "date_of_birth(1i)"=>"1514", "date_of_birth(2i)"=>"3", "date_of_birth(3i)"=>"5", "nationality"=>"American", "bio"=>"Sheila is an awesome Great American Playwright"}, "commit"=>"Update Author", "id"=>"4"}
ETA: コンソールの MYSQL は次のとおりです。
Processing by AuthorsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"gjSXdsSWPBzL65fOHX/pe3XTFRau4NYzZSYsyp1aPAs=", "author"=>{"first_name"=>"Stinky ", "last_name"=>"mggee", "date_of_birth(1i)"=>"2010", "date_of_birth(2i)"=>"4", "date_of_birth(3i)"=>"4", "nationality"=>"Finnish", "bio"=>"TEST"}, "commit"=>"Create Author"}
SQL (0.2ms) BEGIN
SQL (154.1ms) INSERT INTO `authors` (`bio`, `created_at`, `date_of_birth`, `date_of_death`, `first_name`, `last_name`, `nationality`, `updated_at`) VALUES (?, ?, ?, ?, ?, ?, ?, ?) [["bio", "TEST"], ["created_at", Tue, 24 Jul 2012 13:30:23 EDT -04:00], ["date_of_birth", nil], ["date_of_death", nil], ["first_name", "Stinky "], ["last_name", "mggee"], ["nationality", "Finnish"], ["updated_at", Tue, 24 Jul 2012 13:30:23 EDT -04:00]]
それについてmysqlに尋ねたときの出力:
mysql> select date_of_birth from authors where id = 4;
+---------------+
| date_of_birth |
+---------------+
| NULL |
+---------------+
1 row in set (0.00 sec)
RoR Guidesからの次の情報と関係があるのではないかと思います:日付と時刻のヘルパーは、特別な名前のパラメーターを送信します。Active Record がそのような名前のパラメーターを検出すると、他のパラメーターと組み合わせて、列の型に適したコンストラクターに渡す必要があることを認識します。」
とは言っても、インターネット上でこの問題を抱えている人は他に見たことがなく、Formtastic が処理するような問題のようです。最近 Rails 2 から Rails 3 にアップグレードする前は、これは正しく機能していました。