Ruby on rails 根据id将选定类添加到链接
我的问题与此非常相似: 我正在尝试将一个“选定”类添加到我的链接中,该链接与我的投资组合控制器的show action的id有关 以下是我尝试过的:Ruby on rails 根据id将选定类添加到链接,ruby-on-rails,Ruby On Rails,我的问题与此非常相似: 我正在尝试将一个“选定”类添加到我的链接中,该链接与我的投资组合控制器的show action的id有关 以下是我尝试过的: <ul> <% for portfolio in @portfolios %> <li class="<%= controller.class == PortfoliosController and controller.action_name == 'show' and controller.par
<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>
不匹配,我不明白为什么
谢谢你的帮助 注意:参数总是字符串 因此:
旁注:在helpers中提取这种逻辑,它更干净。注意:参数总是字符串 因此:
旁注:在helpers中提取这种逻辑,它更干净。您可能正在比较字符串和数值,而在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\u selected\u portfolio
设置为true
。您可能正在比较字符串和数值,在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\u selected\u portfolio
设置为true