用部分打破表格
Breaking a form with a partial
我有 rails 脚手架制作的表格:
<%= 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>
您可能必须将 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>
您可以在调用部分时传递各种参数。你可以这样做:-
<%= render partial 'fields', locals: { f: f, field_name: :body } %>
这里的 f 是表单对象,而 :body 将是调用部分时要传递的 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 %>
你也可以在你的主文件中做同样的事情,而不是调用那么多的部分。因为这不被认为是一种好的做法。
我会用局部变量 (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
然后在您的表格中您可以调用:
使用 "as:" 您现在可以访问 @fields_names 的实例
在每个部分调用 "field_name"
<%= render partial: "fields", collection: @field_names, as: :field_name,
locals: {f: f} %>
然后你可以在你的 _fields.html.erb
中插入 field_name 和 f
<div class="field">
<%= f.label field_name %><br>
<%= f.cktext_area field_name %>
</div>
collection
的聪明之处在于它会自动呈现与数组中的值相同的次数。
中的局部变量部分查找更多内容
祝你好运! :)
在我看来,更好的方法是自定义一个表单助手并执行如下操作:
<%= 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
我有 rails 脚手架制作的表格:
<%= 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>
您可能必须将 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>
您可以在调用部分时传递各种参数。你可以这样做:-
<%= render partial 'fields', locals: { f: f, field_name: :body } %>
这里的 f 是表单对象,而 :body 将是调用部分时要传递的 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 %>
你也可以在你的主文件中做同样的事情,而不是调用那么多的部分。因为这不被认为是一种好的做法。
我会用局部变量 (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
然后在您的表格中您可以调用:
使用 "as:" 您现在可以访问 @fields_names 的实例 在每个部分调用 "field_name"
<%= 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
的聪明之处在于它会自动呈现与数组中的值相同的次数。
祝你好运! :)
在我看来,更好的方法是自定义一个表单助手并执行如下操作:
<%= 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