为什么在Rails中要使用_form.html.erb?

3

我是Ruby on Rails的新手。我正在使用脚手架为admin创建模型、视图和控制器。

现在我的一位前辈告诉我要在_form.html.erb中做出改变。我不知道如何实现它。此外,相对于正常方法(在索引、新建、显示和编辑中进行更改),使用/更改_form.html.erb的优缺点是什么?

我的 _form.html.erb 如下:

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

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

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

我的管理表格如下:

id serial NOT NULL,
  username character varying(20) NOT NULL DEFAULT ''::character varying,
  email character varying(255),
  first_name character varying(100),
  middle_name character varying(100),
  last_name character varying(100),
  designation character varying(255),
  office_phone character varying(255),
  deleted integer NOT NULL DEFAULT 0,
  super_admin boolean NOT NULL DEFAULT false,
  created_at timestamp without time zone NOT NULL,
  updated_at timestamp without time zone NOT NULL,
  CONSTRAINT admins_pkey PRIMARY KEY (id)

有人能帮我实现这个吗?提前感谢。


1
_form.html.erb 是一个局部视图,因此包含在其他 erb 模板中。局部视图用于减少代码库中的冗余。 - hd1
5个回答

5

在Rails中,以“_”下划线开头的文件称为partials。它鼓励软件开发中的DRY(不要重复自己)原则。您可以重用partials,并且在这种情况下,_form.html.erb可用于new.html.erb和edit.html.erb功能。 我们可以在其他html.erb文件中呈现partials或在控制器中调用它们。 render:partial => 'partial_name' 中的partial_name不带下划线。


1

这意味着您只需要在一个地方进行更改,这符合编程中的“不要重复自己”(DRY)原则。

要实现它,您只需将所需代码拖到一个部分中(命名为_)。

要将其包含在index、edit等html中,请插入render 'partial',其中partial是其名称,但不带下划线。

具体来说,在您的示例中,您可以使用以下模式引用表单中的每个项目

<%= f.label :email %>
<%= f.text_field :email %>

1

了解一下“partials”。它们帮助你使代码更DRY。在这里阅读更多相关信息。


1

在这里,我将借助其他答案为您提供答案,

Rails中常见的视图代码可以放在称为partials的文件中(请阅读@Sachin R关于partials的答案),partials基本上可以避免代码重复并保持代码的清洁/可维护性。

在您的情况下,当您运行脚手架时,您的newedit视图使用相同的表单。因此,该表单已转换为partial(_form)。因此,当您对_form partial进行更改时,更改将对newedit视图都可用。(这就是为什么您的前辈建议在_form中进行更改的原因)

因此,底线是,由于partials是常见的代码段,一旦更改它们,它将应用于整个站点。


0
你可以在 /views/candidates 添加一个 _form.html.erb,并将其他不同的 XXX.html.erb 中相同的内容复制到 _form.html.erb 中,然后在 XXX.html.erb 中键入 <%= render 'form' %>。 这将帮助你将部分内容呈现到 XXX.html.erb 中,以简化你的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接