我正在try 将哈希映射ID保存到rails应用程序中的多次try .我迁移到数据库以适应这个新专栏:

class AddMultiWrongToUser < ActiveRecord::Migration
  def self.up
    add_column :users, :multi_wrong, :string
  end

  def self.down
    remove_column :users, :multi_wrong
  end
end

在我的模型中,我有:

class User < ActiveRecord::Base 
 serialize :multi_wrong, Hash
end

但当我使用rails控制台通过以下操作来测试这一点时:

user = User.create()
user.multi_wrong = {"test"=>"123"}
user.save

输出为假.这里怎么了?

推荐答案

列类型错误.你应该使用文本而不是字符串.因此,您的迁移应该是:

 def self.up
   add_column :users, :multi_wrong, :text
 end

然后Rails会为您正确地将其转换为YAML(并执行正确的序列化).字符串字段的大小有限,只能保存非常小的值.

Ruby-on-rails相关问答推荐

使用ActiveSupport::TimeWithZone将UTC转换为用户定义的时区

发送不调用类或模块中的私有方法

Rails 6:强类型原始 SQL 查询返回数组类型

Rails HMAC - 使用应用程序机密作为加密密钥

为 has_attached_file 等活动记录属性创建类方法

来自控制台的 ActionCable.server.broadcast

将日期时间转换为月、日和年?

attr_accessible(*attributes) 和 attr_protected(*attributes) 有什么区别?

如何在 Windows 中更新 ruby

如何从 Rails 路由中删除控制器名称?

RSpec 设置会话对象

使用 javascript 提交 Rails 远程表单

Ruby on Rails 错误无法加载此类文件 - 更少

关闭 Firefox 中文本字段的自动完成功能

Rspec - Rails - 如何遵循重定向

您推荐哪些工具来分析 Rails 应用程序?

如何从另一个调用 Capistrano 任务?

Heroku - 在浏览器中显示当前提交的哈希

在任何来源中都找不到 thread_safe-0.3.0

使用 ActiveRecord 获取列名