2009-03-24 9 views
1

私は、標準のレイアウトによってヘッダの部分が呼び出される状況があります。 (これはかなり一般的ですが)ヘッダーには検索ボックスがあります。ちょうどstackoverlowのようです。ただし、ユーザーが検索ページにいるときは、ヘッダーから検索ボックスを削除する必要があります。Ruby On Railsのヘルパーメソッドの再定義

私は何をしようとすると、このようなファイルApplicationHelper.rb方法を入れた。

def search_page? 
    return false; 
end 

そしてSearchHelper.rbに、私はこの持っている:

def search_page? 
    return true; 
end 

これはしませんがこれは、SearchHelper.rbのsearch_page関数が、どのコントローラがビューをレンダリングしていても使用されているためです。私は、新しいレイアウトを定義し、ヘッダを部分的に検索ボックスを表示しないようにするためのパラメータを追加することができますが、それは過度のようです。

答えて

1

、このメソッドを定義します。

def search_page? 
    controller.controller_name != "search" 
end 

は、コントローラの名前は何と"search"を交換してください。

2

まず、あなたのRubyを少し微調整します。

def search_page? 
    true 
end 

あなたは(最後の行は、あなたのメソッドの戻り値になります何でも)セミコロンまたはreturnを必要としません。

第2に、すべてのヘルパーは、アプリケーションの初期化時にロードされます。この動作を変更することはできますが、おそらくその価値はありません。

残りについては、_search_form.html.erbと呼ばれる部分があるとしましょう。素晴らしいヘルパーメソッドを作成する(たとえば、search_helper.rb)

def search_form 
    render(:partial => 'search/search_helper') unless @search_page 
end 

レイアウトファイルから検索フォームを呼び出すときに使用します。それから、いくつかの選択肢があります。

あなたのコントローラでbefore_filterを作成することができ、次のいずれか

before_filter :set_search_page 

...your actions here... 

private 

def set_search_page 
    @search_page = true 
end 

またはあなたのアクションで変数を設定します。

def some_action 
    @search_page = true 
end 

を私はむしろ、これは本当にビューの問題であることをにもかかわらず言うだろうあなたのコントローラーでやりたいことよりも。私はこのようなヘルパーメソッドを作成したいと考えています(もう一度、search_helper.rb)。

def search_page 
    @search_page = true 
end 

そして、そのページのビューの上に、私はこのようなものを使用したい:

<% search_page %> 

を(。それは<%なく<%=だことに注意してください - 何も出力はありません)

利点は、不要なインスタンス変数をコントローラから解放することです。アプリケーションヘルパーで

関連する問題