2011-08-30 24 views
1

我的問題是非常相似,這一個:Changing Current Tab in Rails選定類添加到鏈接根據ID

我想要一個「選擇」類添加到我的關於ID我的投資組合控制器的show動作的鏈接

這裏是我試過:

<ul> 
    <% for portfolio in @portfolios %> 
    <li class="<%= controller.class == PortfoliosController and controller.action_name == 'show' and controller.params[:id] == portfolio.id ? 'selected' : '' %>"><%= link_to portfolio.name, portfolio %></li> 
    <% end %> 
</ul> 

但似乎如下:

controller.params[:id] == portfolio.id 

不正確,我不明白爲什麼..

感謝您的幫助!

回答

0

您可能正在比較字符串和數值,這在Ruby中不被認爲是等價的。其中一個或另一個的轉換可能有所幫助。事實上,如果你在一個輔助方法卷這件事,它可能使人們更方便遵循:

def class_for_porfolio_entry(portfolio) 
    controller.class == PortfoliosController and 
    controller.action_name == 'show' and 
    controller.params[:id].to_i == portfolio.id ? 
     'selected' : 
     '' 
end 

你有一大堆的事情出現,所以你可能想看看的方式降低了複雜性,例如利用params代替:

def class_for_porfolio_entry(portfolio) 
    params[:controller] == 'portfolios' and 
    params[:action] == 'show' and 
    params[:id].to_i == portfolio.id ? 
     'selected' : 
     '' 
end 

,如果你有一個布爾標誌在您的控制器設置爲需要稍後使用,避免硬編碼這樣的事情這可以進一步簡化

def class_for_porfolio_entry(portfolio) 
    if (@show_selected_portfolio and @portfolio.id == portfolio.id) 
    'selected' 
    else 
    '' 
    end 
end 

這假定您有一個實例變量@portfolio,在任何控制器的show方法中通常都是這種情況,並且您將在其中應用此邏輯的任何控制器方法中將@show_selected_portfolio設置爲true

1

注意:params總是字符串。

所以:

controller.params[:id].to_i == portfolio.id 

旁註:提取這種邏輯的助手,它是乾淨多了。