2017-07-05 56 views
0

我有這樣的形式通過導軌進行腳手架:打破形式與部分

<%= form_for(@archive) do |f| %> 
    <% if @archive.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@archive.errors.count, "error") %> prohibited this archive from being saved:</h2> 

     <ul> 
     <% @archive.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :objective %><br> 
    <%= f.cktext_area :objective %> 
    </div> 
    <div class="field"> 
    <%= f.label :settings %><br> 
    <%= f.cktext_area :settings %> 
    </div> 
    <div class="field"> 
    <%= f.label :related_documents %><br> 
    <%= f.cktext_area :related_documents %> 
    </div> 
    <div class="field"> 
    <%= f.label :responsability %><br> 
    <%= f.cktext_area :responsability %> 
    </div> 
    <div class="field"> 
    <%= f.label :material_needed %><br> 
    <%= f.cktext_area :material_needed %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br> 
    <%= f.cktext_area :description %> 
    </div> 
    <div class="field"> 
    <%= f.label :preventive_measures %><br> 
    <%= f.cktext_area :preventive_measures %> 
    </div> 
    <div class="field"> 
    <%= f.label :corrective_actions %><br> 
    <%= f.cktext_area :corrective_actions %> 
    </div> 
    <div class="field"> 
    <%= f.label :execution %><br> 
    <%= f.cktext_area :execution %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

,我想分開的領域,我想是因爲它不斷重複使用諧音,什麼樣的變化是的名稱字段,我想呈現字段的部分形式並傳遞字段名稱。由於我要使用自定義ckeditor,而且我會不斷重複表單,因此可能會給出錯誤機會。我有權這樣想嗎?我的想法是否正確?如果是這樣,我怎麼能通過這個領域?這會影響數據庫中的某些內容嗎? 我想做這樣的事情。

形式:

<%= form_for(@archive) do |f| %> 
    <% if @archive.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@archive.errors.count, "error") %> prohibited this archive from being saved:</h2> 

     <ul> 
     <% @archive.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

<%= render partial 'fields', 'field_name' %> 

<!-- Call many times and pass the field name --> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

部分:

<div class="field"> 
    <%= f.label :field_name%><br> 
    <%= f.cktext_area :field_name %> 
    </div> 

回答

0

我會使用局部(f)和集合(field_name符號)進行部分調用。

所以我會在我的控制器中創建一個像這樣的相應動作的數組。

編輯其實你可以採取行動之前創建一個:before_action :field_names, only: [:new, :edit]

def field_names 
    # %i creates an array of symbols 
    @field_names = %i(objectives settings related_objects ...) 
end 

然後在你的表格,您可以撥打:

隨着「爲:」你現在可以訪問@fields_names 的實例在每個部分中稱爲「field_name」

<%= render partial: "fields", collection: @field_names, as: :field_name, 
locals: {f: f} %> 

然後你就可以插頁FIELD_NAME和F在_fields.html.erb

<div class="field"> 
<%= f.label field_name %><br> 
<%= f.cktext_area field_name %> 
</div> 

智能件事collection的是,它會自動呈現相同的次數,因爲有數組中值。

尋找更多的部分局部變量the guide

祝你好運! :)

0

你可能必須通過f到部分...

<%= render partial 'fields', locals: { f: f } %>

你可能遍歷一個列表您想要呈現您的字段的部分屬性並通過當前迭代到部分:

<% %w(objective settings related_documents).each do |field| %> 
    <%= render partial 'fields', locals: { f: f, field: field } %> 
<% end %> 

部分

<div class="field"> 
    <%= f.label field.to_sym %><br> 
    <%= f.cktext_area field.to_sym %> 
</div> 
+0

會是什麼此F:F?你可以通過傳遞一個body來使用一個例子嗎? –

+0

我將修改我的答案 – Eric

0

調用部分時,您可以通過各種參數。你可以做這樣的事情: -

<%= render partial 'fields', locals: { f: f, field_name: :body } %>

這裏f是表單對象和:身體會是你想要調用部分時,通過FIELD_NAME。

可以甚至通過多個字段中的陣列和在部分在它們之間迭代。

<%= render partial 'fields', locals: { f: f, field_names: [:body, :bio] } %>

你的部分代碼會是這個樣子 -

<% field_names.each do |field_name| %> 
    <div class="field"> 
     <%= f.label field_name%><br> 
     <%= f.text_area :field_name %> 
    </div> 
<% end %> 

你可以做同樣的在你的主文件太多,而不是調用這麼多partails的。因爲它不被認爲是一種好的做法。

0

愚見這更好的辦法是,以定製的形式助手,做這樣的事情:

<%= f.cktext_with_label :objective %> 
<%= f.cktext_with_label :settings %> 
<%= f.cktext_with_label :related_documents %> 
<%= f.cktext_with_label :responsability %> 
... 

您創建一個名爲「cktext_with_label」,那麼一種新形式的輔助函數創建領域,如你想要的,甚至是div容器。

您可以檢查這個答案Custom form helpers