3

メニューナビゲーションのあるレイアウトがあります。私はオンラインで見つけたテンプレートを使用しています。メニュー項目ごとに HTML ページがあり、対応するページごとに li 項目クラスが "selected" と呼ばれます。次のようになります。

  <nav>
    <ul class="sf-menu" id="nav">
      <li class="selected"><%= link_to "home", root_path %></li>
      <li><%= link_to "about me", about_path %></li>
      <li><%= link_to "my portfolio" %>
        <ul style="z-index: 2;">
          <li style="z-index: 2;"><%= link_to "portfolio one", portfolio_one_path %></li>
          <li style="z-index: 2;"><%= link_to "portfolio two", portfolio_two_path %></li>
          <li style="z-index: 2;"><%= link_to "portfolio three", portfolio_three_path %></li>
        </ul>
      </li>
      <li><%= link_to "blog", blog_path %></li>
      <li><%= link_to "contact", contact_path %></li>
    </ul>
  </nav>

これは私のapplication.html.erbファイルにあります。私の質問は、ユーザーがクリックしたリンクに応じて、各 li アイテムのクラスをプログラムで「選択済み」に変更するにはどうすればよいですか? これは Ruby で実行できますか、それとも JavaScript を使用する必要がありますか?

4

3 に答える 3

1

current_page?ヘルパーメソッドが必要だと思います- http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-current_page-3F

<li class="<%= "selected" if current_page?(root_path) %>"><%= link_to "home", root_path %></li>
...
于 2013-02-01T23:22:35.063 に答える
0

次のようなことをしたいと思います:

<%= link_to "portfolio one", portfolio_one_path,  class: current_page?(products_path) ? "selected" : "not_selected" %>

あなたのリンクのために

于 2013-02-01T23:23:24.167 に答える
0

コントローラーとアクションの名前は、params ハッシュのビューで使用できます。したがって、これらが異なるアクション/コントローラーである場合は、次のようにすることができます。

<li class=<%= "selected" if params[:controller] == 'portfolio' && params[:action] == 'action_name' %>><%= link_to "portfolio one", portfolio_one_path %></li>

私は個人的にこのアプローチの大ファンではなく、これを直接私の見解に留めています。通常、ロジックをヘルパーにプッシュして使用します。

于 2013-02-01T23:23:45.110 に答える