2013-10-14 3 views

답변

1

단지 지난 5 개의 코멘트를 얻기 위해,이

Comment.limit(5).order('created_at desc').select(:title) 

이 게시물의 제목을 표시 사용할 수 있습니다, 그것은 당신이 게시물의 마지막 5 개의 코멘트를 검색하려는 것 같습니다.

  • 당신은보기에서 직접 모델을 액세스하는 :

    <% Post.limit(5).order('created_at desc').each do |post| %> 
        <% post.comments.select(:title).order('created_at desc').limit(5).each do |comment| %> 
        <%= comment.title %> 
        <% end %> 
    <% end %> 
    

    이 두 가지 문제가 있습니다

    은이 방법을 얻을 수 있습니다. 컨트롤러에서 수행해야합니다.

  • N + 1 문제가 있습니다. 나는이를 테스트 할 수 있지만, 나는 그들이 작동하거나, 적어도 당신에게 아이디어를 줄 것이다 생각 : 당신은 eager loading associations

참고하여 해결할 수 있습니다.

+0

그 덕분에, 답변 주셔서 감사합니다! – user2759575

1

난 당신이 찾고있는 생각 :

Comment.select(:title).order('created_at desc').limit(5).map {|c| c.title} 

이 만든 마지막 5 개의 코멘트 당신에게 제목의 배열을 제공 할 것입니다. 다른 속성이 필요한 경우 (Comment.select([:title, :owner])) select 메소드에 추가하거나 select 및 fetch all 주석 속성을 제거하십시오.

+0

이제 모든 게시물에 대한 마지막 5 개의 댓글을 반환합니다. 어떻게 하나의 게시물로 그것을 제한하는 모든 아이디어? – user2759575

+0

@ user2759575 예,'@ post.comments.select (: title) .order ('created_at desc') .limit (5) .map {| c | c.title}'. 또한 HungryCoder에 따르면, 뷰 대신 컨트롤러에서이 값을로드하여 인스턴스 변수에 할당해야합니다. 쿼리와 디스플레이 관심사를 좀 더 구분합니다. – jvperrin

+0

조언 해 주셔서 감사합니다. 레일을 처음 사용하고 아직 배우기! :) – user2759575

관련 문제