You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails如何创建支持存储width/height键值对列表的表迁移?

Rails 创建支持嵌套数组结构的迁移方案

Rails原生支持JSON/JSONB字段类型,可以直接存储你需要的键值对列表结构,不用额外引入第三方依赖,以下是完整步骤:

1. 生成迁移文件

执行以下Rails命令生成模型和对应迁移文件,你可以将示例中的Furniture替换为你需要的模型名:

rails generate model Furniture name:string size:jsonb

说明:如果使用的数据库是MySQL而非PostgreSQL,将size:jsonb替换为size:json即可

2. 调整迁移配置(可选)

生成的迁移文件默认已经包含所需字段,你可以根据需求补充默认值、非空约束和索引,示例如下:

class CreateFurnitures < ActiveRecord::Migration[7.1]
  def change
    create_table :furnitures do |t|
      t.string :name, null: false
      # 设置默认值为空数组,避免空值查询异常
      t.jsonb :size, default: [], null: false

      t.timestamps
    end
    # 可选:添加GIN索引,大幅提升JSONB字段的查询性能
    add_index :furnitures, :size, using: :gin
  end
end

3. 执行迁移

运行以下命令生效Schema:

rails db:migrate

后续使用说明

完成迁移后你可以直接读写对应结构的数据,Rails会自动完成Ruby对象和JSON结构的序列化/反序列化,无需额外配置:

# 写入数据
Furniture.create(
  name: "Table",
  size: [
    { width: "10", height: "100" },
    { width: "10", height: "200" }
  ]
)

# 读取数据
table = Furniture.find_by(name: "Table")
puts table.size[0][:height] # 输出 100

内容的提问来源于stack exchange,提问作者Bitwise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:48:00