ruby-on-rails - 使用表单在 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字段的方法?
解决方案
如果要存储为 JSON 的字段是文本字段,则可以将以下行添加到模型中,rails 将在每次访问列时处理 JSON 的打包和解包:
serialize :config_str, JSON
推荐阅读
- json - Try-except 在 json 路径中具有三种可能性
- azure - 是否可以在 Azure Pipelines 中编写流程/阶段/步骤脚本?
- android - Android Studio 说我在使用 3.4.1 时需要升级到 Android Gradle 插件 3.2.0
- amp-html - 需要使用 AMP 创建固定侧横幅/弹出窗口
- c++ - 即使已为其分配了非零指针,指针仍返回零
- kong - 如何使用 kong response-transformer 插件删除服务器标头?
- sql - 在 Postgres 的 GIN 索引中使用少量分析器
- ruby-on-rails - Rails API - React:站点 ID 在 POST 上返回 null
- c# - 如何在函数中将对象列表作为参数传递,然后使用对象的属性C#
- javascript - 如何将角度材料步进形式的数据发布到 Node.Js 后端