我拥有数据类型Time
的数组。当我尝试以下列方式插入数据时,我收到错误。
2.2.2 :001 > 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 :002 > p.check_in << Time.now
=> [2015-09-18 19:25:11 +0530]
2.2.2 :003 > p.save
(0.3ms) BEGIN
SQL (1.2ms) INSERT INTO `punch_in_outs` (`check_in`, `check_out`, `created_at`, `updated_at`) VALUES ('---\n- 2015-09-18 19:25:11.695612520 +05:30\n', '--- []\n', '2015-09-18 13:55:19', '2015-09-18 13:55:19')
Mysql2::Error: Incorrect time value: '---
- 2015-09-18 19:25:11.695612520 +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 19:25:11.695612520 +05:30\n', '--- []\n', '2015-09-18 13:55:19', '2015-09-18 13:55:19')
(0.1ms) ROLLBACK
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect time value: '---
- 2015-09-18 19:25:11.695612520 +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 19:25:11.695612520 +05:30\n', '--- []\n', '2015-09-18 13:55:19', '2015-09-18 13:55:19')
我使用mysql数据库。并且还在模态中序列化了这些列。我仍然得到错误
这是我在模型中拥有的代码。
class PunchInOut < ActiveRecord::Base
serialize :check_in, Array
serialize :check_out, Array
end
请帮帮我。
答案 0 :(得分:2)
你不能在MySQL中存储一个TIME列中的序列化数组,它需要是VARCHAR或TEXT。
在ActiveRecord中序列化字段时,它会转换为YAML文本,因此它与非文本列类型不兼容。
您应该只在“时间和时间戳”列等中存储一次。
答案 1 :(得分:0)
您的serialize
方法需要string
或text
类型列
add_column :push_in_outs, :check_in, :string
add_column :push_in_outs, :check_out, :string
Rails将这些字符串序列化为Time
格式