Rails - 嵌套显示两个相关资源

时间:2014-03-26 02:01:14

标签: ruby-on-rails methods instance

我有一个包含很多帖子的活动模型,我试图以大纲格式显示相关的事件和帖子,如下所示:

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'

1 个答案:

答案 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%>

我相信您可以删除帖子列表和事件列表方法。这些功能已经存在。