1

これは私が持っているもので、4 か所で重複しないように部分的に含めたいと考えています。問題は、ユーザーがいるページに基づいて変更する必要があるアクティブなクラスです。これについてどうすればよいですか?それとも、4 つのテンプレートでコードを繰り返すほうがよいのでしょうか?

<div class="navbox">
  <ul class="nav">
    <a href="#" class="active"> Account</li></a>
    <a href="#"><li> Profile</li></a>
    <a href="#"><li> Photos</li></a>
    <a href="#"><li> Security</li></a>
  </ul>
</div>
4

3 に答える 3

3

activeレンダリング時にローカルを渡します。

render :partial => 'navbox', :locals => { :active => 'Account' }

次に、これをあなたのパーシャルとして持ってください:

<div class="navbox">
  <ul class="nav">
    <a href="#"<% if active == 'Account' %> class="active"<% end %>> Account</li></a>
    <a href="#"<% if active == 'Profile' %> class="active"<% end %>><li> Profile</li></a>
    <a href="#"<% if active == 'Photos' %> class="active"<% end %>><li> Photos</li></a>
    <a href="#"<% if active == 'Security' %> class="active"<% end %>><li> Security</li></a>
  </ul>
</div>

これをクリーンアップするにはさまざまな方法 ( link_to、ヘルパー メソッドなど) があり、演習として残します。リクエスト URL から何かが「アクティブ」であるかどうかを推測できる場合は、ローカルを渡す必要がなくなる可能性もあります。

リンクにクラスを追加する代わりに、まったくリンクしたくない場合は、 link_to_unless_current&も見てください。link_to_unless

于 2012-12-27T07:48:05.473 に答える
2

次のようにヘルパーを作成してみてください。

{'Account' => account_path, 'Profile' => profile_path...etc}.each do |name, path|
  content_tag :li do
    link_to name, path, class: (current_page?(path) 'active' : 'regular')
  end
end

メソッドlink_to_unless_current http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_unless_currentもご覧ください。

于 2012-12-27T07:54:20.153 に答える
2

active_link_to gem https://github.com/twg/active_link_toを探してください。 これが最も簡単な方法です

于 2012-12-27T07:43:23.590 に答える