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

我用谷歌搜索了相当大的范围,但找不到任何对此的参考。感谢任何线索或帮助。

4

2 回答 2

1

问题是多参数的事情。rails date_select helper 生成 3 个下拉菜单,将 3 个不同的参数传递给您的控制器。如果您在控制器中使用质量分配,rails 会神奇地将这 3 个值转换为 1 个日期值。这篇(相当旧的)博客文章展示了一种无需批量分配的方法:http ://www.springenwerk.com/2008/05/set-date-attribute-from-dateselect.html 但是,这篇文章相当陈旧,现在可能(!)有更好的方法

于 2013-04-18T16:09:58.077 回答
0

对我来说很清楚的是 dat 对象的 mysql 数据库格式不正确。尝试类似的东西

@user.dob = params[:dob].to_date

尝试以不同的方式格式化日期对象,看看什么是有效的。它也可能有助于打开rails console并尝试手动解决问题。让我知道情况如何。

-布赖恩

于 2013-04-18T16:07:15.613 回答