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)

有人可以帮我实现这个。在此先感谢

4

4 回答 4

5

文件以“_”下划线开头,在 rails 中称为部分。它鼓励软件开发的DRY(不要重复自己)原则。您可以重用部分,在这种情况下,_form.html.erb 可以用于 new.html.erb 和 edit.html.erb 功能。我们可以在其他 html.erb 文件中渲染部分内容,也可以在控制器中调用。 render :partial => 'partial_name'在 partial_name 中没有下划线。

于 2013-03-18T06:55:11.457 回答
1

这意味着您只需要在一个地方进行更改,这与编码中的 Don't Repeat Yourself (DRY) 一致。

要实现它,您只需将您想要的代码拖出一个部分(以_命名)。

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

特别是在您的示例中,您可以使用以下模式引用表单的每个项目

<%= f.label :email %>
<%= f.text_field :email %>
于 2013-03-18T06:56:48.880 回答
1

阅读部分内容。他们帮助你干掉你的代码。在这里阅读更多

于 2013-03-18T06:58:09.997 回答
1

在这里,我试图在其他答案的帮助下给你一个答案,

在 Rails 中,通用视图代码可以放在名为 partials 的文件中,(阅读@Sachin R's有关 partials 的答案),partials 基本上可以避免代码重复并保持代码干净/可维护。

在您的情况下,当您运行 scaffold 时,您的newedit视图使用相同的形式。由于这个原因,该形式已转换为部分 ( _form)。因此,当您进行_form部分更改时,更改将可用于视图newedit视图。(这就是为什么你的前辈要求在 中进行更改_form),

所以底线是,由于部分是公共代码段,一旦你改变它们,它将适用于整个站点。

于 2013-03-18T10:09:07.593 回答