リスト要素としてタブを持つ順序付けられていないリストであるナビゲーションバーがあります。ビューヘルパーを使用して、個々のタブ(リストアイテム)を描画しています。active
ビューによって提供される値に基づいて、それぞれにクラスを適用したいと思います。これは可能ですか?
詳細に説明すると、ビューヘルパーには次のようなものがあります。
def tab_item(tab)
content_tag :li, :class => ('active' if some_variable == tab) do
link_to tab, "/#{tab}"
end
end
そして、特定の見方では、私は次のことを行います。
<% somehow_set_some_variable('dash') %>
これによりsome_variable
、ビューヘルパーが'dash'
であるようになり、そのタブが'active'
クラスを取得するようになります。
これはどうにか可能ですか?そうでない場合、この問題に対する別のアプローチはありますか?コントローラに変数を設定するだけでいいですか?
現在のコントローラーやアクションに基づいた決定の基礎となる記事や質問をすでに見ましたが、これは制限が厳しすぎるため、このアプローチを採用できるかどうかを検討しています。私が思いついたもう1つの解決策は、タブをアクティブ化するための引数を取る1つのビューヘルパーでタブのリスト全体を生成することです。これを各ビューで呼び出します。ただし、レイアウトでリストを生成し、ビューごとにタブをアクティブ化したいと思います。
回避策:これまでのところ、この質問で尋ねたことを実行する方法を知ることなく、妥協案を考え出しました。アプリケーションヘルパーはli
タグを作成activate
し、アプリケーションヘルパーに渡された引数がインスタンス変数と一致する場合に適用されます@activate
。
def nav_tab(tab)
content_tag :li, :id => tab, :class => ('active' if tab == @activate) do
link_to tab, "/#{tab}"
end
end
次に、コントローラーアクションで、その変数を設定するだけです。次に例を示します。
def index
# ...
@activate = 'dash'
end
これは機能し、私が探していた効果があります。ナビゲーションバーは個別に生成され、必要に応じて、各「アクション」でアクティブにするタブを指定できます。
これがこの問題の最善の解決策であるかどうかはわかりません。私は、ビュー固有の変更に対してこれを達成するこの質問のように、これらのものをビュー内に保持しようとしていました。<title>