2012-01-13 4 views
10

私は異なるページで使用している部分があります。私はそれをレンダリングしているビューに基づいて部分的に内部の特定のdivを条件付きで非表示にしたい。レールアクセスビュー名内パーシャル

divを検索して非表示にするページ固有のjavascriptファイルを作成することを考えていました。

しかし、部分の中でビュー名/ページ名を取得する方法があった場合、部分的に中央になり、複数のページに同じJavaScriptファイルを読み込む必要はありません。

誰もがあなたがから呼び出している場所に応じてパラメータを変化させ、部分的にローカル変数としてstyleパラメータを送ることができる部分

答えて

16

@のwahajの答えが仕事だろうが、あなたが中央の場所にあなたが必要なものをやりたいならば、あなたはcontroller_nameをチェックできますあなたがにしているビューを決定する部分でaction_name変数あなたの部分の内側に、

+6

params [:controller]またはparams [:action]はお勧めしません。代わりに 'controller_name'、 'action_name'を使用してください。 – Naveed

+1

うわー、私はばかだと感じます。それが存在するかどうか知りませんでした。それを指摘してくれてありがとう! – jhdavids8

+1

これを反映するために元の回答を編集する方がよいでしょう。 –

2

の内側にこれを行う方法を知っています。

render :partial => 'xyz', :locals => {:style => 'display:none or display:block'} 

とあなたができる部分で:ような何か

<div style=<%=style%>></div> 
+1

またはおそらくローカル変数 'hide_div'。部分的にうまくいったことが定義されていますか?これは、部分変数をレンダリングするすべての呼び出しで変数を必要としないことを意味します。 –

1

シンプルなソリューションを(例えばcontroller_name == "services"action_name == "show"はあなたがサービスコントローラの表示ビューになっている知っているでしょう)あなたが部分的に示す必要があるかどうかを確認か

_partial_name.html.erb

<%= content_tag :div, :style=> "display : #{show_div? ? 'block' : 'none'}" do%> 
    html...or other stuff 
<%end%> 

をして、アプリケーションのヘルパーで

アプリ/ヘルパー/ application_helper.rb

def show_div? #you can set name of your div like 'show_sidebar_div?' 
    #decide either show this div or not 
action_name == 'show' 
end 
6

あなたがすることができますHelperメソッド内で現在レンダリングされている部分の名前を次のように取得します。

controller.view_context.view_renderer.instance_variable_get('@_partial_renderer').instance_values['path'] 
関連する問題