27

現在のコントローラーとアクションが特定の値に等しいかどうかをテストするために実装current_page?していますが、そのコントローラーとアクションの組み合わせでは true を返しません。

- if current_page?(:controller => 'pages', :action => 'main') 
# doesn't return true when on that controller/action combination

それが機能する唯一の方法は、次のようにもう少し冗長な方法を使用する場合です。

- if controller.controller_name == 'pages' && controller.action_name == 'main'
# this works just fine

私の構文が間違っていますか、それともここで何か他のことが起こっていますか? BOOL を設定するなど、これを行うためのより良い方法はありますか、それともこれが適切な方法ですか?

最終的な目標は、メインのランディング ページに特定のヘッダーのみを表示し、他のすべてのページに別のヘッダーを表示することです。

編集:からの関連出力rake routes

pages_main GET  /pages/main(.:format)  {:controller=>"pages", :action=>"main"}

root   /(.:format)   {:controller=>"pages", :action=>"main"}

また、これはレンダリング時のサーバー出力です。

Started GET "/" for 127.0.0.1 at 2011-03-03 16:54:40 -0500
Processing by PagesController#main as HTML
Rendered pages/main.html.haml within layouts/application (203.8ms)
4

2 に答える 2

32

current_page?(root_path)正常に動作します。

しかし、私はそれを動作させることはできませ:controller:action

ヘルパーは文字列を期待しているようです。

current_page?(url_for(:controller => 'pages', :action => 'main')) 

うまく動作します。

docとの奇妙な矛盾。

于 2011-03-03T22:52:31.120 に答える
4

非常によく似た2つのルートがあるときに、この問題が発生しました。これをチェックしてください:

match '/galleries/sales' => 'galleries#sales', :as => 'gallery_sales'
match '/galleries/sales/:id' => 'galleries#sales', :as => 'gallery_category_sales'

私のコントローラーアクションはパラメーターに応じて出力を処理しましたが、最初はこのb/cを複製したくありませんでした。

私がしたとき:

current_page?(:controller => 'galleries', :action => 'sales', :id => id)

あるべきときに true を返さなかったので、別のルートとアクションを作成しましたが、うまくいきました。

于 2011-09-09T17:47:10.590 に答える