我正在编写一个Rails应用程序,我想做的是显示主页上的所有帖子。我有一个用于静态页面的控制器,这是主页的来源,还有一个用于帖子的控制器。到目前为止,我有这个:
home.html.erb:
<% @posts.each do |post| %>
<%= post.comment %>
<% end %>
帖子控制器:
def home
@posts = Post.order("created_at desc").limit(5)
end
通过查看其他答案可以得到总体思路,但是undefined method 'each' for nil:NilClass
即使数据库中有多个帖子,我仍然会收到错误消息。
到目前为止,如果这种关系完全影响到社区,那么社区中会有很多职位。谢谢。
静态页面控制器:
class PagesController < ApplicationController
def show
render template: "pages/#{params[:page]}"
end
end
默认情况下,没有任何内容可以告诉您StaticController
执行中的home
操作PostsController
。
Vishal是正确的,因为您应该将逻辑移至StaticController
,但是仍然没有什么可以调用该动作。
一种解决方案是实例化@posts
您的#index
路线,以便当有人访问索引时,将执行该逻辑。
我认为,更好的解决方案是#home
在您的方法中创建一个私有方法StaticController
(也许将其重命名为更具描述性的方法……我load_posts
在下面使用),然后在文件顶部创建一个before_action
以告知Rails您想要#load_posts
渲染时的内容index
class StaticController < ApplicationController
before_action :load_posts, only: :index
def index
#logic for your index
end
private
def load_posts
@posts = Post.order("created_at desc").limit(5)
end
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句