Rails 3序列化哈希值保存但不保持

时间:2017-12-01 23:35:18

标签: mysql ruby-on-rails ruby ruby-on-rails-3 serialization

我有一个带有序列化文本列的模型。当我保存并重新加载记录时,值似乎仍然存在,但是当我查询记录时,值就消失了。

(为简单起见,下面的演示被截断)

class Subscription < ActiveRecord::Base
   serialize :pending_changes, Hash
   attr_accessible :pending_changes
   attr_accessor :pending_changes
end

class AddPendingChangesToSubscriptions < ActiveRecord::Migration
  def change
    add_column :subscriptions, :pending_changes, :text
  end
end

s = Subscription.new

s.pending_changes = {foo: "bar"}

s.save 
# => true

s.reload.pending_changes
# => {foo: "bar"}

Subscription.last.pending_changes
# => nil

{"foo" => "bar"}保存为值时会发生同样的事情。

我还注意到,当调用save时,生成的SQL查询如下:

UPDATE 'subscriptions' SET 'updated_at' = '2017-12-01 23:46:05', 'pending_changes' = '--- {}\n' WHERE 'subscriptions'.'id' = 2

根据类似问题的答案,我确保db列数据类型为text,并且我已尝试使用serialize :column_name添加和不添加Hash }。

1 个答案:

答案 0 :(得分:5)

从模型中删除attr_accessible:pending_changes和attr_accessor:pending_changes,因为数据库中有一列,所以不需要使用attr_accessible,attr_accessor。使用下面的型号代码并尝试。

class Subscription < ActiveRecord::Base
  serialize :pending_changes, Hash
end