Как добавить параметры HTML после того, как ссылка была сгенерирована с помощью link_to? - PullRequest
0 голосов
/ 16 декабря 2010

Я генерирую кучу ссылок в строке меню моего приложения. Когда пользователь просматривает одну из страниц строки меню, я бы хотел, чтобы стиль изменился, чтобы показать, что он просматривает текущую страницу. Это довольно простая задача, над которой я работаю.

Что я хотел бы сделать, так это высушить моих помощников. Я строю ссылки так:

link_to('events', :controller => 'event_sections', :action => 'show', :group_id => @group), :class => "current_page_item"

Я много раз повторяюсь с кодом "if is current page". Мне было интересно, есть ли хороший способ сначала построить все ссылки, которые мне нужны, а затем добавить к нему: class => "current_page_item".

Ответы [ 3 ]

1 голос
/ 16 декабря 2010

Я бы подошел к этому по-другому: как насчет установки переменной, такой как @current_page_name, в вашем контроллере (каждое действие установит его), и тогда все ваши link_tos проверят эту переменную перед добавлением класса.

Затем, чтобы высушить его еще больше, вы можете создать частичку или функцию, которая будет обтекать ваш link_to (и я вижу, что idlefingers просто опубликовал аналогичный ответ).

1 голос
/ 04 апреля 2013

link_to принимает параметры URL и HTML. Вы можете просто положить их в свой хэш

link_to('events', :controller => 'event_sections', :action => 'show', :group_id => @group), :class => "current_page_item"

становится:

link_to'events', {:controller => 'event_sections', :action => 'show', :group_id => @group}, :class => "current_page_item"

Обратите внимание на новый {} вокруг пути контроллера.

1 голос
/ 16 декабря 2010

Полагаю, это зависит от того, насколько сложна ваша логика «если текущая страница».Обычно я создаю простой помощник, такой как этот, чтобы использовать имя контроллера и текст ссылки, чтобы решить, является ли ссылка «текущей»:

def tab(name, link)
  css_class = (controller.controller_name.humanize =~ /#{name}/i ? "current_page_item" : "page_item")
  link_to name, link, :class => css_class
end

Тогда вы можете вызвать это вместо link_to, где вы создаетеваши вкладки:

= tab "Events", :controller => 'event_sections', :action => 'show', :group_id => @group
...