Ruby on rails 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 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
@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
中,现在它在所有控制器中都可用,但这是一种不好的做法。