在Ruby on Rails

时间:2015-09-18 14:04:30

标签: mysql ruby-on-rails arrays

我拥有数据类型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

请帮帮我。

2 个答案:

答案 0 :(得分:2)

你不能在MySQL中存储一个TIME列中的序列化数组,它需要是VARCHAR或TEXT。

在ActiveRecord中序列化字段时,它会转换为YAML文本,因此它与非文本列类型不兼容。

您应该只在“时间和时间戳”列等中存储一次。

答案 1 :(得分:0)

您的serialize方法需要stringtext类型列

add_column :push_in_outs, :check_in, :string
add_column :push_in_outs, :check_out, :string

Rails将这些字符串序列化为Time格式