2011-01-18 2 views
0

메신저는 응용 프로그램을 만들려고 노력은 application.html.erb에서 모델 databasetable의 값에 액세스 할 수 있습니까?

사용자와

여러 그룹에 가입하실 수 있습니다 이 사용자 - 모든 그룹들이 그룹 페이지 그룹/1 또는 그룹에 대한 accessable 한 것입니다 페이지 에서 같은 메뉴가 있습니다/2

그래서 group.id에 따라 lnks와 함께 application.html.erb에 메뉴를 넣고 싶었지만 application.html.erb에서이 ID에 액세스하는 방법을 모르겠다.

답변

1

사용할 수 이것은 종종 레이아웃에 content_for을 사용하여 수행됩니다.

# application.html.erb 
<div id="menu_div> 
    <ul> 
    ... etc ... 
    </ul> 
</div> 

yield 문 내부 내용을 바꾸기 :

# page 
<% content_for :group_menu do %> 
    <ul> 
    ... etc ... 
    </ul> 
<% end %> 
:

<div id="menu_div> 
    <%= yield :group_menu %> 
</div> 

그런 다음 뷰 템플릿에 content_for 블록을 추가의 당신이 application.html.erb에서 특정 사업부에서 메뉴를 원하는 가정 해 봅시다

각 페이지 템플릿은 content_for 블록에 고유 한 메뉴 코드를 정의 할 수 있습니다. 이것은 블록에서 도우미 메서드를 사용하고 인스턴스 변수를 전달함으로써 더욱 일반화 될 수 있습니다.을 (분명 인위적인 예)

<% content_for :group_menu do %> 
    <%= show_me_the_menu(@group) %> 
<% end %> 

와 헬퍼 : @group 가정

편집

컨트롤러에 할당, 당신은 뭔가를 할 수

def show_me_the_menu(group) 
    content_tag :ul do 
    group.users.collect do |user| 
     concat(content_tag(:li, user.some_method)) 
    end 
    end 
end 
+0

정말 대단 합니다만, 예를 들어 같은 위치에있는 모든 사이트의 그룹 이름 (예 : application.html.erb에서 최고)이 필요한 경우 어떻게 필요합니까? 헬퍼 메소드는 어떻게 생겼지? noobness 죄송합니다 – malice

+0

내 편집을 참조하십시오. 그게 도움이 되니? – zetetic

+0

예 thx 대단히! – malice

1

올바른 접근 방법은 다음과 같습니다. 이것을 ApplicationController에서 before_filter을 통해 설정하고보기의 인스턴스 변수로 사용하십시오.

컨트롤러에서 @links =와 같이 현재 사용자를 기반으로 링크를 계산하는 로직을 설정하십시오. 보기에서

당신은 같은 것을 할 : 물론

<ul> 
    <%- for link in @links -%> 
    <li><%= link.title => 
    <%- end -%. 
</ul> 

을, 당신은 당신이 당신의 연결 나는 당신이 생각하는 모든 컨트롤러/뷰에 사용할 수있게하려는 경우에만와 ApplicationController에 @ 링크를 설정합니다.

레일 세포도 여기에 http://cells.rubyforge.org/

+0

문제는 링크가 현재 사용자와 관련이 없으며 사용자 그룹 비 등록 사용자가 그룹의 대부분의 페이지를 방문 할 수 있어야하기 때문입니다. 나는 세포를 체크 할 것이고, thx는 – malice

+0

이다. 그러면 현재 그룹을 기반으로 @links를 설정하고 레이아웃 /보기에 그것을 인쇄해라. – Mirko

+0

나에게 이것을 보여주는 가이드를 링크시킬 수 있습니까?나는 레일에 아주 새롭고, 당신의 설명을 따르려고 노력했지만 그다지 효과가 없었습니다./ – malice

0

저는 다른 방식으로 제 문제를 해결했습니다. 나는 그룹 모델에서 "메뉴"를 만들었고이 부분을 application.html.erb에 부분적으로 렌더링했습니다.

관련 문제