2011-04-10 2 views
3

내 application.html.erb 레이아웃에서 다음 코드가 포함 된 /menu.html.erb 공유 부분을 렌더링 해요.메뉴 부분 생성 코드는 어디에 속합니다

<nav> 
    <ul> 
    <% Post.all.each do |post| %> 
     <%= link_to post.title, post.permalink %> 
    <% end %> 
    </ul> 
</nav> 

사실 모델에서 내보기에서 호출하는 것은 다소 문제가있는 것처럼 보입니다. 나에게 MVC를 존중한다는 의미에서. 누구든지이 문제를 해결하는 방법에 대한 제안이 있습니까?

+0

가능한 중복 (HTTP : //stackoverflow.com/questions/4297269/whats-the-rails-way-to-load-other-models-collections-for-new-edit-update-and-cr) –

답변

4

귀하와 ApplicationController에 before_filter을 추가

before_filter :define_posts 

def define_posts 
    @posts = Post.all 
end 

그런 다음 메뉴가 같아야합니다 :

<nav> 
    <ul> 
    <% @posts.each do |post| %> 
     <%= link_to post.title, post.permalink %> 
    <% end %> 
    </ul> 
</nav> 

또 다른 방법은 귀하와 ApplicationController에 도우미 메서드를 만드는 것입니다 :

helper_mathod :posts 

def posts 
    @posts ||= Post.all 
end 

따라서 직접 메뉴를 호출 할 수 있습니다.

<nav> 
    <ul> 
    <% posts.each do |post| %> 
     <%= link_to post.title, post.permalink %> 
    <% end %> 
    </ul> 
</nav> 

두 번째 방법은 조금 더 깨끗해 보입니다.

하나는 현재 솔루션은 Decent Exposure gem 사용하는 것입니다 : [? 새, 편집 업데이트에 대한 다른 모델 컬렉션을로드하고 작업을 만들 수있는 레일 방법은 무엇]의

http://railscasts.com/episodes/259-decent-exposure

관련 문제