Возможно, вы сравниваете строковые и числовые значения, которые в 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
в любомметод контроллера, где применяется эта логика.