在Rails中使用表单保存jsonb字段的最佳方法。

问题描述 投票:0回答:1

我想直接编辑 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-rails jsonb
1个回答
0
投票

如果你想存储为JSON的字段是一个文本字段,你可以在模型中添加以下一行,rails会在每次访问列时处理打包和解压JSON。serialize :config_str, JSON

© www.soinside.com 2019 - 2024. All rights reserved.