2013-07-20 28 views
0

我到此爲止:香港專業教育學院創建了一個新的Rails應用程序: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" %> 

然後我複製了代碼的形式後/指數發佈/ _index.html.erb

但不知何故,在歡迎的/ home我的部分不會工作,我的錯誤:

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

'@posts = nil',你的控制器已經'@posts =帖子.all'? – gmaliar

+0

有沒有另一種方法,所以我不必在我的控制器中定義它新的,只是可以重用後控制器? –

+1

看看https://github.com/josevalim/inherited_resources – gmaliar

回答

1

你需要在你的控制器來定義@posts:

@posts = Post.all 
+0

有沒有另一種方法,所以我不必在我的控制器中定義它新的,只是可以重用後控制器? –

+1

不,當您輸入welcome#home路由時,它不會加載PostsController。所以你必須在WelcomeController中定義它。 – Richard

+1

您可以使用Post.all.each加載視圖中的模型,但這不會被視爲好代碼。 – Richard

1

如果你並不真的需要一個值得歡迎的控制器,你可以從帖子#指數保持@posts並顯示使用render相同的步驟中的另一模板:

類PostsController < ApplicationController中
DEF索引
@posts = Post.all
render 'home'
結束
...

您將home.html.erb放在'views/posts'目錄中。 如果你想呈現模板是在 '意見/ some_other_directory' 你可以使用:
渲染:文件=> 'CONTROLLER_NAME/TEMPLATE_NAME'