我有桌子punch_in_outs。并且在具有以下代码的相应模型中。
class PunchInOut < ActiveRecord::Base
belongs_to :employee
serialize :check_in, Array
serialize :check_out, Array
end
并且在迁移中我有以下代码
class ChangePunchInOutFields < ActiveRecord::Migration
def change
change_column :punch_in_outs, :date, :date
change_column :punch_in_outs, :check_in, :time
change_column :punch_in_outs, :check_out, :time
end
end
当我尝试创建记录时,我收到错误Mysql2::Error: Incorrect time value: '---
2.2.2 :001 > reload!
Reloading...
=> true
2.2.2 :002 > p = PunchInOut.new
=> #<PunchInOut id: nil, employee_id: nil, check_in: [], check_out: [], date: nil, created_at: nil, updated_at: nil, shift_id: nil, shift_name: nil>
2.2.2 :003 > p.check_in << Time.now
=> [2015-09-18 17:45:39 +0530]
2.2.2 :004 > p.save
(0.3ms) BEGIN
SQL (2.2ms) INSERT INTO `punch_in_outs` (`check_in`, `check_out`, `created_at`, `updated_at`) VALUES ('---\n- 2015-09-18 17:45:39.760533268 +05:30\n', '--- []\n', '2015-09-18 12:15:44', '2015-09-18 12:15:44')
Mysql2::Error: Incorrect time value: '---
- 2015-09-18 17:45:39.760533268 +05:30
' for column 'check_in' at row 1: INSERT INTO `punch_in_outs` (`check_in`, `check_out`, `created_at`, `updated_at`) VALUES ('---\n- 2015-09-18 17:45:39.760533268 +05:30\n', '--- []\n', '2015-09-18 12:15:44', '2015-09-18 12:15:44')
(0.2ms) ROLLBACK
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect time value: '---
- 2015-09-18 17:45:39.760533268 +05:30
请帮帮我。
答案 0 :(得分:0)
什么是正确的mysql datetime literal:&#39; 2012-12-31 11:30:45&#39;。
我相信你的文字是&#34; 2015-09-18 17:45:39.760533268 +05:30&#34;。 有关正确的mysql日期时间格式的更多信息,请检查链接。祝你好运!
答案 1 :(得分:0)
您正在使用serialize
定义check_in
和check_out
属性。这意味着活动记录将它们转换为YAML表示并尝试将该YAML表示存储为字符串。
当它试图将yAML序列化存储在mysql时间字段中时,mysql会响应你正在获取的错误,因为mysql只是无法在时间列中存储YAML字符串
要存储一组时间对象,您需要check_in
和check_out
成为数据库中的字符串列(如果您要存储,甚至可能是文本列大阵列的时间)。
(您可能还需要考虑,如果您只想以小时,分钟和秒的形式存储Time.now
返回完整日期的日期/时间的时间。这将按天/序列化月/年不仅仅是小时/分钟/秒。)
答案 2 :(得分:0)
请在此处查看相同问题的相应答案:https://stackoverflow.com/a/32654104/384417
您无法同时序列化并存储在时间列中。序列化产生了一个TEXT(实际上,以YAML格式编码),数据库并不知道它是一个日期或其他什么。
在TIME / TIMESTAMP / DATE列中,您只能存储单个值。