2010-08-28 31 views
0

我有一個不同的subheader部分我想渲染依賴於我在我的應用程序中的位置。我如何通過ruby確定我在哪裏?或者我需要解析URL?您如何通過ruby代碼找出您所使用的控制器/操作?

例子:

如果我在我的根級我想使用/ home /子頭,如果我在控制「測試」我想渲染敢/測試/子頭,等等等等...

基本上在尋找這部分:

(在我的應用程序視圖)

<%- if ############ %> 
<%= render :partial => '/home/subheader' %> 
<%- elsif ########### %> 
<%= render :partial => '/test/subheader' %> 
<%- else %> 
<%= render :partial => '/layouts/subheader' %> 
<%- end %> 

感謝

回答

2

您可以使用current_page?

if current_page? :controller => 'home', :action => 'index' 
    do_this 
end 

或使用控制器的方法controller_name

if controller.controller_name == 'home' 
    do_that 
end 

如果你在每個控制器基礎上用這個,你應該需要layouts或使用不同的模板,呈現不同取決於控制器/操作的部分是代碼異味。

PS:你也可以嘗試讓params[:controller]params[:action]變量,但我不知道他們是否正確傳遞,如果你的路徑未進行管理,這將是該標準/:controller/:action

0

稍微簡單的方法使用content_for。例如:

#app/layouts/application.html.erb 

<html> 
    <body> 
    <h1>My Application</h1> 
    <%= yield(:subheader) || render(:partial => 'layouts/subheader') %> 
    <%= yield %> 
    </body> 
</html> 

這種佈局將首先嚐試呈現一個從該視圖通過在子標題內容,否則會呈現局部「佈局/子報頭」。然後在需要自定義子頭每個視圖,所有你需要做的是:

#app/views/home/index.html.erb 

<% content_for :subheader, render(:partial => 'subheader') %> 

而在你的其他控制器,你可以使用完全不同的東西,如:

#app/views/other/show.html.erb 

<% content_for :subheader do %> 
    <h2>A different subheader</h2> 
<% end %> 
相關問題