2013-04-18 63 views
1

我从sqllite移动到mysql(从头开始重新创建相同的工作空间,没有做任何迁移)。Mysql2 ::错误:错误的日期值:'---!ruby/hash:ActiveSupport :: HashWithIndifferentAccess

该代码适用于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 ('[email protected]', '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') 

我GOOGLE了相当的程度,但无法找到该任何引用。欣赏任何线索或帮助。

回答

1

问题是多参数的事情。 rails date_select助手生成3个下拉菜单,它们将3个不同的参数传递给你的控制器。如果你在你的控制器中使用质量分配,rails将这3个值神奇地转换为1日期值。这个(相当古老的)博客文章展示了一种不用大量分配的方式:http://www.springenwerk.com/2008/05/set-date-attribute-from-dateselect.html 但是,这篇文章比较老,现在可以(!)成为更好的方式

+0

谢谢你在转换时完美工作。 – Bharath

0

对我来说很清楚的是dat数据对象没有正确格式化为mysql数据库。尝试类似

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

尝试格式化以不同的方式来看看有什么效果的日期对象。它也可能有助于打开rails console并尝试手动解决问题。让我知道那是怎么回事。

-Brian