我从sqllite转移到mysql(从头开始用mysql重新创建了相同的工作区。没有进行任何迁移。)
代码适用于sqllite但是错误地使用了mysql。这就是我的database.yml的样子:
development:
adapter: mysql2
database: dev
username: root
password:
host: localhost
pool: 5
我的代码通过视图中的日期选择获取日期:
<%= date_select(:dob, NIL, :use_short_month => true, :start_year => Time.now.year - 100,
:end_year => Time.now.year, :order => [:day, :month, :year]) %>
该模型如下所示:
t.string "firstName"
t.string "lastName"
t.string "Email"
t.string "password"
t.date "dob"
但是通过控制器中的以下代码插入失败:
@user.dob = params[:dob]
这是我得到的错误:
Mysql2::Error: Incorrect date value: '--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
(1i): '2013'
(2i): '4'
(3i): '18'
' for column 'dob' at row 1: INSERT INTO `users` (`Email`, `created_at`, `dob`, `firstName`, `lastName`, `password`, `personalEmail`, `updated_at`) VALUES ('abc@xyz.com', '2013-04-18 15:46:26', '--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\n(1i): \'2013\'\n(2i): \'4\'\n(3i): \'18\'\n', 'ABC', 'XYZ', 22, NULL, 'ab4d8d2a5f480a137067da17100271cd176607a1', '2013-04-18 15:46:26')
我用谷歌搜索了相当程度,但无法找到任何参考。感谢任何线索或帮助。
答案 0 :(得分:1)
问题是多参数的问题。 rails date_select helper生成3个下拉列表,将3个不同的参数传递给控制器。如果您在控制器中使用质量赋值,则rails会将这3个值神奇地转换为1个日期值。这篇(相当古老的)博客文章展示了一种没有批量作业的方法:http://www.springenwerk.com/2008/05/set-date-attribute-from-dateselect.html 但是,这篇文章相当陈旧,现在可以(!)成为更好的方式
答案 1 :(得分:0)
我清楚的是,mysql数据库的dat对象格式不正确。尝试像
这样的东西@user.dob = params[:dob].to_date
尝试以不同方式格式化日期对象以查看哪些有效。打开rails console
并尝试手动处理也可能有所帮助。让我知道这是怎么回事。
-Brian