【发布时间】:2015-07-08 02:40:05
【问题描述】:
我有一个表格,我想出现在每个页面的顶部,所以我将它包含在 /app/views/layouts/application.html.erb 文件中,我收到错误 undefined methodmodel_name' NilClass:Class` 尝试加载页面时。
这是 application.html.erb 中的 sn-p 格式
<%= form_for @user do |f| %>
<h3>Add new contact</h3>
<%= f.text_field :first_name %><br />
<%= f.text_field :last_name %>
<%= f.text_field :email %>
<hr />
<%= f.submit "Add Contact" %>
<% end %>
这是我的 /app/controllers/user_controller.rb
class UserController < ApplicationController
def index
end
def new
@user = User.new
end
end
我在想我遇到了这个错误,因为由于表单在 application.html.erb 文件中,我需要以某种方式指定路径,但是我对 rails 还是很陌生。
如果您需要发布任何其他内容,请告诉我。
编辑 按照 Ola 的建议,在我的 app/views/layouts/application.html.erb 文件中,我有这样的内容:
<div>
<%= yield :add_user %>
</div>
在我的 app/views/users/new.html.erb 文件中我有这个
<% content_for :add_user do %>
<%= form_for @user do |f| %>
<h3>Add new contact</h3>
First Name<br />
<%= f.text_field :first_name %><br />
Last Name<br />
<%= f.text_field :last_name %><br />
Email<br />
<%= f.text_field :email %>
<hr />
<%= f.submit "Add Contact" %>
<% end %>
<% end %>
表单未呈现,因为我的网址是 http://localhost:3000/admin/index,因此它正在 app/views/admin/index.html.erb 中寻找 add_user content_for
【问题讨论】:
-
我认为“尝试加载页面时”您的意思是
/users -
对不起,我正在加载这个页面
http://localhost:3000/admin/index -
是的,我也这么认为,在上面的示例中
/users/new应该可以工作(有点),尽管您的视图结构完全错误 - 请参阅下面的答案。 -
恐怕你也把
yield指令颠倒过来了——相信我,我知道当你第一次遇到问题时,所有这些东西是多么令人困惑。 将呈现当前操作的输出,具体取决于您所在的页面。非常适合当您希望每个控制器/操作设置某些通用页面元素的内容(通常用于设置文档标题)但您实际上想要完全相反的情况 - 在每个页面上呈现相同的某些组件。为此,您应该在模板中使用<%= render :partial => "thing/partial" %>。
标签: ruby-on-rails ruby ruby-on-rails-3