2010-05-07 167 views
1

我使用的部分來渲染應用程序的菜單嘗試,資本使用CSS的「標籤」的基礎上,局部變量(標籤):傳遞從視圖中的變量佈局的局部視圖

<%= link_to "employees", jobs_path, :class => (tab=="employees" ? "selected":"unselected") %> 
    <a class="unselected">jobs</a> 
    <%= link_to "tags", tags_path, :class => (tab=="tags" ? "selected":"unselected") %> 

的部分嵌入到應用程序的佈局:

<body> 
... 
<!-- tab variable needs to be set in the view, not the layout --> 
<%= render :partial => "layouts/primary_menu", :locals => { :tab => "profiles" } %> 
... 
</body> 

不幸的是,我需要在視圖中設置變量的值,但變量不可用。我應該使用:content_for符號而不是:locals?

在某些時候,我可能想將模型實例變量傳遞給partial,所以解決方案需要靈活。

有沒有更好的方法?

回答

2

我決定利用link_to_unless_current UrlHelper的:

<%= link_to_unless_current "enroll", enroll_path, :class => "unselected" do 
    link_to "enroll", enroll_path, :class => "selected" 
end %> 
2

我認爲有多種方式來處理這個問題,這裏是一個 - 不一定是最好的

<!-- layout --> 
<body> 
    <%= yield(:tabs_navigation) %> 
    ... 
</body> 

<!-- views --> 
<%- tabs_navigation(render :partial => "layouts/primary_menu", :locals => { :tab => "profiles" }) %> 

另一種方式 - 使用一個成員變量,而不是當地人(這有點像作弊 - 但有效)

<!-- layout --> 
<body> 
    <%= render :partial => "layouts/primary_menu" %> 
    .... 
</body> 

<!-- views --> 
<%- @current_tab = "profiles" %> 

現在直接訪問@current_tab在primary_menu局部

使用content_for

<!-- layout --> 
<body> 
    <%= yield(:tabs_navigation) %> 
    ... 
</body> 

<!-- views --> 
<%- content_for :tabs_navigation do -%> 
    <%= render :partial => "layouts/primary_menu", :locals => { :tab => "profiles" } %> 
<%- end -%> 

http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

+0

威爾:content_for工作? – craig 2010-05-07 20:48:02

+0

增加的內容_例如;當你只是想改變單個變量的值時,它非常詳細 – house9 2010-05-07 22:21:36