我有一个包含很多帖子的活动模型,我试图以大纲格式显示相关的事件和帖子,如下所示:
Event 1
Post 1
Post 2
Event 2
Post 3
Post 4
...
我目前有以下内容,由于某种原因,控制器无法在我的Events模型中找到“postlist”方法(在@eventlist实例上执行)。
class Event < ActiveRecord::Base
belongs_to :group
has_many :posts
def postlist
Post.from_event_posts(self)
end
end
class Post < ActiveRecord::Base
belongs_to :event
belongs_to :user
def self.from_event_posts(event)
where(event_id: event.id)
end
end
class GroupsController < ApplicationController
def show
@eventlist = @group.eventlist #returns hash of events for a group - confirmed working
#Get list of posts for each event
@postlist = @eventlist.postlist
end
end
<%= @eventlist.each do |e| %>
<ul>
<li><%= e.title %></li>
<%= e.postlist.each do |p| %>
<ul>
<li><%= p.comment %> | <%=p.user_id%> </li>
</ul>
<%end%>
</ul>
<%end%>
我收到以下错误:#
的未定义方法`postlist'答案 0 :(得分:1)
您收到此错误是因为您不是在一个事件上调用方法postlist,而是在一系列事件上调用。顺便说一句,Rails中的一般约定是调用那些变量@events
和@posts
(只是一个提示,以后习惯它可以很方便)。
你能告诉我们你的小组课吗?
我会写这样的东西:
def show
@events = @group.events.includes(:posts)
end
include方法将posts表连接到您正在执行的SQL查询,在呈现视图之前加载帖子。您的观点如下:
<%= @events.each do |e| %>
<ul>
<li><%= e.title %></li>
<%= e.posts.each do |p| %>
<ul>
<li><%= p.comment %> | <%=p.user_id%> </li>
</ul>
<%end%>
</ul>
<%end%>
我相信您可以删除帖子列表和事件列表方法。这些功能已经存在。