我有这个由rails scaffold制作的表格:
<%= 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 %>
我想分开字段,我想使用partials,因为它不断重复,字段的名称有什么变化,我想渲染字段的部分形式并传递字段名称。由于我将使用自定义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 :(得分:0)
您可能必须将var digitArry = ['9', '8', '7', '4', '5', '6'];
var integer = +digitArry.join('');
console.log(integer);
传递给部分...
f
您可以遍历要为字段呈现部分的属性列表,并将当前迭代传递给部分:
<%= render partial 'fields', locals: { f: f } %>
部分
<% %w(objective settings related_documents).each do |field| %>
<%= render partial 'fields', locals: { f: f, field: field } %>
<% end %>
答案 1 :(得分:0)
调用partial时可以传递各种参数。你可以这样做: -
<%= render partial 'fields', locals: { f: f, field_name: :body } %>
这里f是表单对象,并且:body将是调用partial时要传递的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。因为它不被认为是一种好的做法。
答案 2 :(得分:0)
我会使用locals(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
然后在您的表单中,您可以致电:
使用&#34; as:&#34;您现在可以访问@fields_names的实例 叫&#34; field_name&#34;在每个部分
<%= render partial: "fields", collection: @field_names, as: :field_name,
locals: {f: f} %>
然后您可以在_fields.html.erb
<div class="field">
<%= f.label field_name %><br>
<%= f.cktext_area field_name %>
</div>
关于collection
的聪明之处在于,它会自动渲染与数组中的值相同的次数。
答案 3 :(得分:0)
在我看来,更好的解决方法是自定义表单助手并执行以下操作:
<%= f.cktext_with_label :objective %>
<%= f.cktext_with_label :settings %>
<%= f.cktext_with_label :related_documents %>
<%= f.cktext_with_label :responsability %>
...
您创建了一个名为&#34; cktext_with_label&#34;的新表单助手。然后创建你想要的字段,甚至是div容器。
您可以查看此答案Custom form helpers