我想直接编辑 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