我正在按照here找到的教程。这很简单,我按照说明完全按照步骤6.7进行操作。此时,我收到错误
undefined method `each' for nil:NilClass
当我尝试访问rails服务器上的index.html.erb时。
我知道数据库运行正常,因为我可以完成步骤6.3中提到的所有内容,创建新帖子并显示/编辑/销毁它们,绝对没问题。
具体来说,问题在于
行<% @posts.each do |post| %>
它基本上声称@posts
是零。
我很感谢这个ROR新手的任何帮助!感谢。
index.html.erb
<h1>Hello, Rails!</h1>
<table>
<tr>
<th>Name</th>
<th>Title</th>
<th>Content</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @posts.each do |post| %>
<tr>
<td><%= post.name %></td>
<td><%= post.title %></td>
<td><%= post.content %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, :confirm => 'Are you sure?',
:method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to "My Blog", posts_path %>
posts_controller.rb
class PostsController < ApplicationController
# GET /posts
# GET /posts.json
def index
@posts = Post.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
答案 0 :(得分:11)
为了使views
在Rails中正常工作,它们必须位于正确的目录中。这是Rails喜欢的所谓“Convention over Configuration”的众多实现之一。
因此,如果您有方法index
并且此方法位于名为PostsController
的控制器内,则您必须在目录index
中包含名为views/posts/
的视图。这样,Rails将知道在处理get方法时必须呈现此视图。
关于一个好的教程,我会推荐这个one。它是extense并涵盖了许多与Rails本身不相关的东西,比如在Heroku和一些CSS上进行部署。