Я бы свел к минимуму логику, представленную на ваш взгляд. В этом случае переместите функциональность атрибута условного класса в вспомогательный класс.
Чтобы сделать ваш код менее хрупким, вы можете использовать «controller_name» вместо params [: controller] для сравнения с вашей строкой. Это предотвратит возможное переопределение того, что пользователь передает переменную «controller».
Эта функция вернет либо nil, либо «selected» на основе переданного аргумента, совпадающего с имя_контроллера:
def conditional_select(user_controller_name)
"selected" if controller_name == user_controller_name
end
link_to t('.projects'), projects_path, :class => conditional_select("projects")
Это позволяет повторно использовать код в других ссылках и упрощает тестирование. Он также разделяет функциональность, оставляя link_to беспокоиться о ссылке и «conditional_select» заботиться о создании значения атрибута class.