在我忘记之前,这是我正在运行的: 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的以下信息有关:“select_date不适用于更新或创建Active Record对象的表单,因为Active Record期望params哈希的每个元素对应于一个属性。日期和时间的模型对象帮助器提交具有特殊名称的参数,当Active Record看到具有这些名称的参数时,它知道它们必须与其他参数组合并提供给适合于列类型的构造函数。“
那就是说,我没有在互联网上看到有这个问题的其他人,而且看起来就像Formtastic会处理的那样。这在我最近从Rails 2升级到Rails 3之前正常工作。