Решение для выбранного шаблона CSS Anti-Pattern - PullRequest
1 голос
/ 04 декабря 2011

Я смотрю на некоторые из нашего кода, и есть много примеров следующего:

link_to t('.projects'), projects_path, :class => params[:controller] == "projects" ? "selected" : ""

Цель этого - изменить стиль ссылки / вкладки / и т. Д., Чтобы указать, что текущая страница соответствует этой ссылке. Эта модель кажется чрезмерно хрупкой, и как будто должен быть лучший путь. Кто-нибудь знает один?

1 Ответ

0 голосов
/ 04 декабря 2011

Я бы свел к минимуму логику, представленную на ваш взгляд. В этом случае переместите функциональность атрибута условного класса в вспомогательный класс.

Чтобы сделать ваш код менее хрупким, вы можете использовать «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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...