簡體   English   中英

simple_form嵌套json屬性

[英]simple_form nested json attributes

Company模型preferences jsonb字段

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

以下html input字段應使用simple_form標記simple_fields_for創建

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

按照以下說明 ,我只能使用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 %>

待辦事項:

  • 由於對is_a? Hash的顯式檢查,以上代碼僅在哈希中支持2級深度“循環” is_a? Hash is_a? Hash到第二級。 目前尚不支持3級等,因此最好編寫一個helper方法來動態生成所有這些輸入字段(無論該哈希值有多深)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM