2014-03-26 87 views
1

嵌套顯示我有了很多帖子的事件模型,我想顯示相關的事件和職位的大綱格式,比如:導軌 - 兩個相關資源

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

,因爲你調用的方法postlist不是一個事件,你得到這個錯誤,但事件的陣列上。順便說一下,R​​ails的一般慣例是調用變量@events@posts(只是一個提示,習慣它可能會很方便)。

你能向我們展示你的小組課嗎?

我會寫這樣的事情:

def show 
    @events = @group.events.includes(:posts) 
end 

的方法包括將加入職位表,你正在執行的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%> 

我相信你可以刪除郵件列表和事件列表方法。這些功能已經存在。

+0

謝謝,這工作得很好。儘管我剛剛開始Rails開發,但我注意到使用@ events/@ posts是約定,但是難道讓每個全局變量都命名爲相同的東西會讓人感到困惑嗎? – kyle

+0

也許在一開始,但稍後它會變得如此自然,相信我:)。 '@ post','@ posts'和'Post'意味着完全不同的東西。我認爲它實際上相當不錯! – Oxynum