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