2017-06-05 88 views
1

所以我有這個結構模型:Rails的5 fields_for集合下築巢

document { 
    structure { 
    id, 
    ... 
    }, 
    fields { 
    field { 
     id, 
     ... 
    }, 
    value { 
     ... 
    } 
    } 
} 

而且我想放在一起形式的字段,其中字段將如下所示:

<input type="hidden" name="document[fields][0][field][id]" /> 
<input type="text" name="document[fields][0][value]" /> 

<input type="hidden" name="document[fields][1][field][id]" /> 
<input type="text" name="document[fields][1][value]" /> 

... 

這是目前我在做什麼:

<%= document.fields.each_with_index do |df, i| %> 
    <%= f.fields_for "fields[]", df do |builder| %> 
     <p> 
     <%= builder.label df.field.name %> 
     <%= builder.fields_for :field do |field_builder| %> 
      <%= field_builder.hidden_field :id, value: df.field.id %> 
     <% end %> 

     <%= builder.fields_for :value do |value_builder| %> 
      <%= render df.field.edit_view, field: df.field, builder: value_builder %> 
     <% end %> 
     </p> 
    <% end %> 
    <% end %> 

但由此產生的字段名稱是:

document[fields][field][id] 
document[fields][value][value] 

換句話說,索引缺失。

使用<%= builder.hidden_field :id, value: df.field.id %>導致正確的格式,但沒有索引(因爲字段對象還沒有id):document[fields][][id]但這不是值的選項,因爲可能涉及多個字段。

有沒有辦法使用窗體幫助器來做到這一點,或者我所做的只是過於虛無?

編輯:這裏涉及到的車型:

的想法是有一組可配置文檔領域。該結構確定可用字段,而document_field是文檔與包含值的字段之間的關係。

class Field < ApplicationRecord 
    belongs_to :structure 
end 

class Document < ApplicationRecord 
    belongs_to :structure 
    has_many :document_fields 

class DocumentField < ApplicationRecord 
    belongs_to :document 
    belongs_to :field 

class Structure < ApplicationRecord 
    has_many :fields 
+1

您可以添加模型,嘗試重現您的場景嗎? –

+0

已被添加到文章 – user1456632

回答

1

您應該配置一個nested attributes setup on your models,建立在控制器上的嵌套關係,並在您實例化一個對象form_for塊,而不是傳遞一個參考符號。

+0

適用於document_field [field],但不適用於value,它不是一個單獨的模型,它只是一個包含任意結構化數據的JSON對象......如何使用類似accept_nested_attributes_for的東西來實現類似的功能? – user1456632