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

标签 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

根据对类似问题的回答,我确定数据库列的数据类型是 text 并且我尝试使用 serialize :column_name 有和没有附加哈希

最佳答案

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

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

关于mysql - Rails 3 序列化哈希值保存但不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47602967/

相关文章:

ruby - 简化 Ruby 方法 : leave unnecessary variables off

ruby - 在标题中生成 ID

mysql - 想要将 MySQL 字段的值限制在特定范围内(十进制值)

php - 如何使用 puppetlabs-mysql 安装 mySQL 5.6.23

mysql - 错误代码 : 1235. This version of MariaDB doesn't support 'COUNT(DISTINCT) aggregate as window function'

ruby-on-rails - 使用 authlogic rails 插件在数据库中预填充管理员用户

php - 根据日期时间比较PHP-MySQL中的两个查询并将所选数据插入表中

javascript - 未定义方法 `company' 为 nil :NilClass

ruby-on-rails - 事件记录来自实例的所有查询

ruby-on-rails - Rails Marketplace - Spree Gem 还是从头开始构建?