現在のコントローラーとアクションが特定の値に等しいかどうかをテストするビューで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)
current_page?(root_path)
は正常に動作します。
しかし、:controller
と:action
で機能させることはできません
ヘルパーは文字列を期待しているようですので、
current_page?(url_for(:controller => 'pages', :action => 'main'))
うまくいきます。
the doc との奇妙な矛盾。
非常に似ている2つのルートがあるときにこの問題が発生しました。これをチェックしてください:
match '/galleries/sales' => 'galleries#sales', :as => 'gallery_sales'
match '/galleries/sales/:id' => 'galleries#sales', :as => 'gallery_category_sales'
私のコントローラーアクションはパラメーターに応じて出力を処理しましたが、最初はこれを行いましたが、複製したくありませんでした。
私がしたとき:
current_page?(:controller => 'galleries', :action => 'sales', :id => id)
必要なときにtrueが返されなかったため、別のルートとアクションを作成しましたが、うまくいきました。