html - simple_form 嵌套 json 属性

标签 html ruby-on-rails json ruby forms

Company型号preferences jsonb field :

Company.new.preferences
=> { display_settings: { attr1: "" }}

以下html input field应使用 simple_form 创建标签simple_fields_for

<input type="text" name="company[preferences][display_settings][attr1]">

我只能按照此 instructions 渲染带有 name="company[preferences][attr1]"input它将持久保存到数据库中:

Company.last.preferences
=> { attr1: "" }

我正在使用以下erb:

<% preferences = PreferencesDecorator.new(@company.preferences["display_settings"])
  f.simple_fields_for(preferences) do |field|
    preferences.each do |key, value| %>
     <label for="<%= key %>"><%= key %></label>
     <%= field.input_field key %>
  <% end
end %>

最佳答案

未经测试,但你可以尝试一下:

<%= f.simple_fields_for :preferences, OpenStruct.new(f.object.preferences) do |ff|
  <% ff.object.to_h.each do |key, value| %>
    <% if value.is_a? Hash %>
      <%= ff.simple_fields_for key, OpenStruct.new(value) do |fff| %>
        <% fff.object.to_h.each do |key, value| %>
          <%= fff.input key, input_html: { value: value } %>
        <% end %>
      <% end %>
    <% else %>
      <%= ff.input key, input_html: { value: value } %>
    <% end %>
  <% end %>
<% end %>

待办事项:

  • 上面的代码仅支持散列中的 2 级深度“循环”,因为显式检查了 is_a?哈希直到第二层。第三级等尚不支持,因此最好编写一个 helper 方法来动态生成所有这些输入字段(无论哈希值有多深)。

关于html - simple_form 嵌套 json 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54324283/

相关文章:

Javascript:在存在其他嵌套标签的范围内获取纯文本

ruby-on-rails - 取消继承的 STI 模型的关联

ruby-on-rails - Rails - 自定义 html 到 simple_form 标签

jquery - 我如何将对象数组从js发送到服务器?

javascript - 我使用 AngularJS 的 js 文件出现问题 : "Uncaught Error: [$injector:modulerr]"

Html 文本区域 : problems with accented letters

javascript - 该日期值采用什么格式?

javascript - 使用 AJAX 响应解析 JSON 对象并将其转换为 html 表

javascript - jQuery 问题与点击嵌套创建的元素

ruby-on-rails - rbenv 在 Mac OS Mojave 10.14.3 上安装 2.6.1 失败