Mysql2 ::错误:日期值不正确:'---!ruby / hash:ActiveSupport :: HashWithIndifferentAccess

时间:2013-04-18 16:02:08

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我从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')

我用谷歌搜索了相当程度,但无法找到任何参考。感谢任何线索或帮助。

2 个答案:

答案 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