为什么在rails中使用_form.html.erb

时间:2013-03-18 06:51:05

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

我是Ruby on Rails的新手。我使用scaffold为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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

这意味着您只需要在一个地方进行更改,这与编码时不要重复自己(DRY)一致。

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

要将其包含在索引的html中,编辑等,您可以插入render 'partial',其中partial是其名称而不带下划线。

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

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

答案 2 :(得分:1)

阅读部分内容。它们可以帮助您干掉代码。阅读更多here

答案 3 :(得分:1)

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

在Rails中,公共视图代码可以放在名为partials的文件中,(读取@Sachin R's回答部分内容),partials基本上可以避免代码重复,并保持代码清洁/可维护。

在您的情况下,当您运行脚手架时,您的newedit视图使用相同的表单。由于这个原因,表单已转换为部分(_form)。因此,当您对_form部分进行更改时,这些更改将同时适用于newedit次观看。 (这就是为什么你的老年人要求在_form)中进行更改,

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