首页 > 解决方案 > 使用表单在 Rails 中保存 jsonb 字段的最佳方法

问题描述

我想直接编辑jsonb我的模型的字段。我正在使用文本区域字段来显示 jsonb 内容,然后将其转换为哈希值,:attr_accessor以创建一个“假”字段。有没有更好的方法来实现它?

所以我的模型有config字段,看起来像这样:

class PrizeDefinition < ApplicationRecord
  # TODO: find better way to handle this
  attr_accessor :config_str

  after_initialize :set_config_str

  def set_config_str
    self.config_str = config.to_json
  end
end

我的表格如下所示:

    <div class="form-group">
      <%= f.label :config_str, t('admin.attributes.config') %>
      <%= f.text_area :config_str, class: 'form-control', rows: 5 %>
    </div>

在控制器中,我像这样显式更新字段:

def update
  item = PrizeDefinition.find(params[:id])
  item.update(prize_definition_params)
  # TODO: pass config and prize definition params in single request
  item.update(config: JSON.parse(params.require(:prize_definition)[:config_str]))
  redirect_to admin_prize_definition_path(item)
end

我的问题是:
1. 如何使转换隐式(使用序列化程序)?
2.有没有更好的保存jsonb字段的方法?

标签: ruby-on-railsjsonb

解决方案


如果要存储为 JSON 的字段是文本字段,则可以将以下行添加到模型中,rails 将在每次访问列时处理 JSON 的打包和解包: serialize :config_str, JSON


推荐阅读