2014-03-26 2 views
1

의 중첩 표시 나는 많은 게시물이있는 이벤트 모델을 가지고, 나는, 개요 형식으로 이벤트 및 게시물 관련을 표시과 같이하기 위해 노력하고있어 :레일 -이 개 관련 자료

Event 1 
    Post 1 
    Post 2 
Event 2 
    Post 3 
    Post 4 
... 

I 현재 다음과 같은 이유로 컨트롤러가 내 이벤트 모델에서 "postlist"메서드 (@eventlist 인스턴스에서 작동)를 찾을 수 없습니다. 당신은 당신이없는 하나 개의 이벤트에 메소드 postlist를 호출하기 때문에이 오류가 있지만 이벤트의 배열에 #

답변

1

에 대한 정의되지 않은 메서드`postlist '

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

나는 다음과 같은 오류가 발생합니다. 그런데 레일즈의 일반적인 규약은 변수들을 @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%> 

그리고 나는 당신이 postlist 및 eventlist 방법을 제거 할 수 있다고 생각합니다. 그런 종류의 기능은 이미 존재합니다.

+0

감사합니다. 필자는 Rails 개발을 시작했지만, @ events/@ posts를 사용하는 것이 관례라는 것을 알았지 만, 똑같은 이름의 모든 전역 변수를 갖는 것은 혼란스럽지 않습니까? – kyle

+0

어쩌면 처음에는 어쩔 수 없지만 나중에는 너무 자연 스러울 것입니다. :). '@ post','@ posts','Post'는 완전히 다른 것을 의미합니다. 나는 그것이 실제로 아주 멋지다라고 생각한다! – Oxynum