到目前为止我的步骤:我已经创建了一个新的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>
那我错了什么?
答案 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;