我用单例方法和一个部分解决了它。
在模型中,我添加回调以在运行时加载属性:
after_initialize :load_configs
after_find :load_configs
和加载配置方法
def load_configs
config_params&.keys&.each do |param|
define_singleton_method(param) do
config_params[param]
end
define_singleton_method("#{param}=") do |value|
config_params[param] = value
end
end
end
好的!现在你有了一个 jsonb 字段,其中有很多键,每个键在实例方法上都有一个属性。
例子:
instance.config_params = {'key_a': 1, key_b: 2}
instance.save
instance.reload.key_a
1
instance.key_a = 10
instance.key_a
10
instance.key_b
2
好的!型号还行!
现在你需要将它加载到管理中,好吗?
我们走吧!
到一个文件中,你将 rails_admin 配置到你的模型中
edit do
group 'Configurations' do
field :config_params do
partial 'config_params_partial'
end
end
end
现在您需要将部分文件创建到 de 文件夹中
app/views/rails_admin/main/_config_params_partial.html.erb
部分代码是这样的
<% @object.config_params&.each do |key, value| %>
<%= form.fields_for :config_params, @object.config_params[key] do |config_params_fields| %>
<div class="field controls">
<%= config_params_fields.label @object.type.config_params[key]['label'] %>
<br/>
<%= config_params_fields.text_field key,
:value => value,
type: @object.type.config_params[key]['kind'],
disabled: @object.type.config_params[key]['editable'] == false,
class: 'form-control' %>
<% if @object.type.config_params[key]['required'] == true %>
<span class="help-block">Obrigatório. </span>
<% end %>
</div>
<% end %>
<% end %>
观测系统:我创建了一个名为 type 的模型,它控制关于我的字段的每个元信息,但您可以将其创建为锁定的,仅填充字段属性。
重启服务器,开心就好!