1

Railsアプリにシンプルなナビゲーションバーがあります(、、、HomeなどNewsContact。そして、追加する現在のページを定義する必要があります:class => 'active'。現在のページを定義するための解決策はほとんどありません。そして、私も独自のバージョンを作成しました。しかし、それらはすべて1つに減ります。

<li class=<%= current_page?(tratata) ? "active" : nil %>...</li>

このソリューションをすべての人に適用できます<li> - elementsが、毎回これを書くことはできませんか?

4

2 に答える 2

1

これを行う1つの方法は、ユーザーが表示しているページが、アクセスしているコントローラーの名前と一致するかどうかを確認することです(さらに具体的にするために、コントローラー名とアクション名の組み合わせを行うこともできます)。

application_helper

def nav_helper(arg)
  controller_name == arg ? "current" : ""
end

見る

<li class="<%= nav_helper('about') %>">
  <a href="#">A link</a>
</li>

編集:

おっと、質問を編集する前にこれを書きました。これをすべての「li」タグに追加するには、メソッドを使用してその中にcontent_tag配置する別のヘルパーを使用nav_helperします。

于 2012-07-20T21:13:43.850 に答える
1

これはそれを行うための最良の方法ではありませんが、現在のコントローラーとアクションをプルすることについていくつかの考えを与えるでしょう。

よりクリーンなコードにする方法の詳細については、 https://github.com/weppos/tabs_on_railsを参照してください。ただし、これにはもう少しセットアップが必要です。現在のページをチェックしてさまざまなスタイルを設定するtabs_tag関数を作成します。個人的に、私はこの宝石をあまり気にせず、自分のページを自分のやり方でスタイリングすることを好みました。

<%= tabs_tag do |tab| %>
  <%= tab.home      'Homepage', root_path %>
  <%= tab.dashboard 'Dashboard', dashboard_path %>
  <%= tab.account   'Account', account_path %>
<% end %>

if "#{controller.controller_name.to_s}.#{controller.action_name.to_s}" == "pages.index"
  <li class='active'>
else
  <li>
end

またはヘルパーメソッドを使用します

def current_page(page,action)
  if controller.controller_name.to_s == page && controller.action_name.to_s == action
    'active'
  else
    'not_active'
 end
end

そしてあなたの見解では

<li class="<%= current_page('pages','index') %>">
于 2012-07-20T21:22:44.537 に答える