我们的edit页面和new页面非常相似,事实上,他们共同共享着相同的代码用来显示form。 让我们用一个局部视图来剔除重复的代码。按照惯例,局部文件的前缀是一下划线。
ps. 想了解更多的局部文件信息,可以参考 Layouts and Rendering in Rails
创建一个新的文件 app/views/articles/_form.html.erb,编辑如下的内容:
<%= form_for @article do |f| %> <% if @article.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@article.errors.count, "error") %> prohibited this article from being saved:</h2> <ul> <% @article.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <p> <%= f.label :title %><br> <%= f.text_field :title %> </p>
<p> <%= f.label :text %><br> <%= f.text_area :text %> </p>
<p> <%= f.submit %> </p> <% end %> |
对于 form_for 所声明的都是和原来的一模一样的。我们使用这个更短的,更简单的 form_for 声明 去替代其他的form,这么做的原因是@article是一个对于完整RESTful路由集的资源映射,Rails能够推断出来哪个URI或者哪个方法能够被使用。更多的关于form_for用法,可以参考 Resource-oriented style.
现在,让我们来修改视图 app/views/articles/new.html.erb,用到这个新的局部视图,重新编辑它:
<h1>New article</h1>
<%= render 'form' %>
<%= link_to 'Back', articles_path %> |
同样的处理这个视图:app/views/articles/edit.html.erb
<h1>Edit article</h1>
<%= render 'form' %>
<%= link_to 'Back', articles_path %> |
原文 http://guides.rubyonrails.org/getting_started.html#using-partials-to-clean-up-duplication-in-views
—end