Ruby on rails Rails显示简单部分?

Ruby on rails Rails显示简单部分?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,到目前为止,我的步骤是:我创建了一个新的rails应用程序: rails new sample cd sample rails g scaffold Post name:string content:string rails g controller welcome home 下一步,我在欢迎/主页视图中添加了一行: <h1>Welcome#home</h1> <p>Find me in app/views/welcome/home.html.erb&

到目前为止,我的步骤是:我创建了一个新的rails应用程序:

rails new sample

cd sample

rails g scaffold Post name:string content:string

rails g controller welcome home
下一步,我在欢迎/主页视图中添加了一行:

<h1>Welcome#home</h1>
<p>Find me in app/views/welcome/home.html.erb</p>
<%= render "posts/index" %>
欢迎#回家
在app/views/welcome/home.html.erb中查找我

然后我将代码表单post/index复制到post/_index.html.erb

但不知何故,我的部分工作在欢迎/回家,我的错误:

NoMethodError in Welcome#home

Showing C:/Sites/sample/app/views/posts/_index.html.erb where line #12 raised:

undefined method `each' for nil:NilClass
Extracted source (around line #12):

9:     <th></th>
10:   </tr>
11: 
12: <% @posts.each do |post| %>
13:   <tr>
14:     <td><%= post.name %></td>
15:     <td><%= post.content %></td>
NoMethodError欢迎光临#家
显示C:/Sites/sample/app/views/posts/_index.html.erb,其中第12行出现:
nil:NilClass的未定义方法“each”
提取的源(第12行附近):
9:     
10:   
11: 
12: 
13:   
14:     
15:     

那么我做错了什么?

您需要在控制器中定义@posts:

@posts = Post.all

如果您真的不需要欢迎控制器,您可以使用
render

在同一步骤中保留@posts from posts#索引并显示另一个模板
类PostsController def索引
@posts=Post.all

渲染“主页”

结束


您将
home.html.erb
放在“views/posts”目录中。 如果要呈现的模板位于“视图/某些其他目录”中,则可以使用:

render:file=>'controller\u name/template\u name'

@posts=nil
,您的控制器是否有
@posts=Post.all
?是否有其他方法,这样我就不必在我的控制器中定义新的控制器,只需重新使用Post控制器?看看有没有其他方法,这样我就不必在我的控制器中定义新的控件,只需重复使用post控制器?不,当您进入欢迎回家路线时,它不会加载PostsController。因此,您也必须在WelcomeController中定义它。您可以使用Post.all.each在视图中加载模型,但这不是好代码。我可以将其移动到帮助器方法吗?(Rails初学者)您可以将其放入
应用程序控制器
过滤器前:获取帖子
然后
def get\u posts@posts=Post.all end
中,现在它在所有控制器中都可用,但这是一种不好的做法。