1

現在のページに応じて、ナビゲーション バーに特定のアイテムを表示しています。サインイン ページに移動すると、正しいアイテムが表示されます。間違ったパスワードでサインインすると、アイテムが変更され、正しくなくなります。

私のhtmlで私はチェックしますif (current_page?(new_user_session_path))

間違ったパスワードが送信され、ページがリロードされた後、この条件は true を返さず、navbar に間違った項目が表示されます。サーバーログのリクエストを調べたところ、POST (パスワード送信の失敗) の後にページが 2 回目に読み込まれたためだと推測されます。もう一度確認する必要がある別のパスはありますか?

4

2 に答える 2

1

のソース コードを見るとcurrent_page?、リクエストの HTTP モードが GET または HEAD 以外の場合、常に false が返されます。

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-current_page-3F

def current_page?(options)
  unless request
    raise "You cannot use helpers that need to determine the current "                  "page unless your view context provides a Request object "                  "in a #request method"
  end

  return false unless request.get? || request.head?

...

したがって、間違ったフォームが とまったく同じパスにある場合でもnew_user_session_path、ロジックは一致しません。

controller.controller_name代わりにand をcontroller.action_name直接比較することを検討してください。正確にはエレガントではありませんが、より信頼性が高くなります。

于 2013-10-16T14:57:39.647 に答える