Rails显示简单的局部?

时间:2013-07-20 08:37:36

标签: 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</p>
<%= render "posts/index" %>

然后我将代码表单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>

那我错了什么?

2 个答案:

答案 0 :(得分:1)

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

@posts = Post.all

答案 1 :(得分:1)

如果您真的不需要欢迎控制器,可以保留@posts来自帖子#index并使用render在同一步骤中显示另一个模板:

class PostsController&lt; ApplicationController
def指数
@posts = Post.all
render 'home'
结束
...

您将home.html.erb置于&#39; views / posts&#39;目录。 如果您要呈现的模板位于&views; some_other_directory&#39;你可以使用:
render:file =&gt; &#39; CONTROLLER_NAME / TEMPLATE_NAME&#39;