[英]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.