我有一个带有序列化文本列的模型。当我保存并重新加载记录时,值似乎仍然存在,但是当我查询记录时,值就消失了。
(为简单起见,下面的演示被截断)
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
}。
答案 0 :(得分:5)
从模型中删除attr_accessible:pending_changes和attr_accessor:pending_changes,因为数据库中有一列,所以不需要使用attr_accessible,attr_accessor。使用下面的型号代码并尝试。
class Subscription < ActiveRecord::Base
serialize :pending_changes, Hash
end