Как изменить класс якоря с другой страницы в ruby ​​на рельсах? - PullRequest
0 голосов
/ 10 сентября 2011

у меня есть меню в макете приложения скажи

 <ul>
    <li><a href="index.asp">Home</a></li>
    <li><a href="dashboard.asp">Dashboard</a></li>
    <li><a class="active" href="/people">People</a></li>
 </ul>

Теперь я хотел бы изменить класс другого якоря с другой страницы ... скажем, для домашней страницы это будет похоже ...

  <ul>
     <li><a class="active" href="index.asp">Home</a></li>
     <li><a href="dashboard.asp">Dashboard</a></li>
     <li><a href="/people">People</a></li>
  </ul>

как этого добиться? Кстати, я новичок в Рор.

Ответы [ 4 ]

1 голос
/ 10 сентября 2011

Это можно сделать следующим образом.

Напишите вспомогательный метод для этого (вспомогательные методы предназначены для выполнения некоторых простых функций для макета презентации, это идеальный случай).

ВВ Rails вы можете получить имя исполняемого в данный момент контроллера как

params[:controller]

и выполнить действие как

params[:action] 

Так что в вашем помощнике приложения вы можете написать что-то вроде

module ApplicationHelper
  def active_link (link)
    (link == params[:controller]) ? "active" : ""
  end
end

В приведенном выше примере, если текущий контроллер соответствует текущей ссылке, он вернет строку как «активную» или вернет пустую строку

Наконец, на ваш взгляд,

<ul>
     <li><a class="<%= active_link('home') %>" href="index.asp">Home</a></li>
     <li><a href="<%= active_link('dashbord') %>">Dashboard</a></li>
     <li><a href="<%= active_link('people') %>">People</a></li>
</ul>

Примечания

  • В этом решении предполагается, что у вас есть контроллер с подходящим именем для каждой ссылки.
  • Я не проверял это, но должно работать, но этодолжна быть концепция
0 голосов
/ 22 сентября 2011

Есть помощник link_to_unless_current, который делает то, что вам нужно, хотя и не всегда, как ожидалось - он игнорирует параметры запроса. Но если все ваши ссылки указывают на разные действия / контроллеры, это должно сработать.

0 голосов
/ 22 сентября 2011

Что бы это ни стоило, вы также можете переопределить link_to:

def link_to(*args, &block)
  options_key, html_key = block_given? ? [0, 1] : [1, 2]

  args[html_key] ||= {}
  args[html_key][:class] = [args[html_key][:class], "active"].compact.join(' ') if current_page?(args[options_key])

  super(*args, &block)
end

Вы можете использовать его так:

<ul>
    <li><%= link_to "Home", "index.asp" %></li>
    <li><%= link_to "Dashboard", "dashboard.asp" %></li>
    <li><%= link_to "People", "/people" %></li>
</ul>
0 голосов
/ 10 сентября 2011

Один из способов сделать это - передать переменную экземпляра из вашего контроллера.Например, если вы отправлены на домашнюю страницу:

class Pages < ApplicationController
  def index
    @active = "index"
  end
end

Теперь, когда вы находитесь в режиме навигации, вы должны сделать что-то вроде:

<li><a class="<%= "active" if @active == "index" %>" href="index.asp">Home</a></li>
...