Rails中jsonb字段supported_currencies的数据存储方法问询
Rails表创建与jsonb字段数据存储实操
一、创建带jsonb字段的表
先写迁移文件,比如你要创建products表(换成自己的业务表名即可),迁移代码如下:
class CreateProducts < ActiveRecord::Migration[7.0] def change create_table :products do |t| # 按需添加其他业务字段,比如商品名称 t.string :name # 你定义的jsonb字段,默认空数组,不允许为null t.jsonb "supported_currencies", default: [], null: false t.timestamps end # 可选:如果后续要基于这个jsonb字段做查询,加个GIN索引能提升查询效率 add_index :products, :supported_currencies, using: :gin end end
写完后执行迁移命令:rails db:migrate,表就创建完成了。
二、把表单数据存进jsonb字段
1. 处理表单提交参数
假设前端表单提交的参数结构是这样的(多选货币后携带对应汇率):
# 示例提交参数 params = { product: { name: "跨境商品", supported_currencies: [ { currency: "USD", rate: 1.3 }, { currency: "ZAR", rate: 1.03 } ] } }
2. 模型中配置强参数
在对应的模型文件(比如app/models/product.rb)里,配置强参数允许传入嵌套结构:
class Product < ApplicationRecord def self.permitted_params(params) params.require(:product).permit( :name, # 允许supported_currencies作为包含currency和rate的数组哈希传入 supported_currencies: [:currency, :rate] ) end end
3. 控制器中保存数据
在控制器里直接用强参数创建或更新记录:
# 创建新记录 Product.create(Product.permitted_params(params)) # 更新已有记录 product = Product.find(params[:id]) product.update(Product.permitted_params(params))
4. 手动构造数据存储(非表单场景)
如果是自己构造数据而非来自表单,直接赋值数组哈希即可:
product = Product.new(name: "手动测试商品") product.supported_currencies = [ { currency: "USD", rate: 1.3 }, { currency: "ZAD", rate: 1.93 } ] product.save!
三、验证数据存储是否正确
打开Rails控制台,查询最新记录就能验证:
product = Product.last puts product.supported_currencies.inspect # 输出示例:[{ "currency" => "USD", "rate" => 1.3 }, { "currency" => "ZAR", "rate" => 1.03 }]
内容的提问来源于stack exchange,提问作者awais iqbal
相关产品推荐
相关产品推荐

