当前页面? POST后错了

时间:2013-10-16 14:40:13

标签: ruby-on-rails ruby

我根据当前页面在导航栏中显示某些项目。当我进入登录页面时,会显示正确的项目。如果我使用错误的密码登录,则项目会发生变化且不正确。

在我的HTML中,我检查if (current_page?(new_user_session_path))

提交错误密码并重新加载页面后,此条件不会返回true并且在导航栏中显示错误的项目。我查看了服务器日志上的请求并且我猜测它是因为在POST之后第二次加载页面(密码提交失败)。我需要第二次检查不同的路径吗?

2 个答案:

答案 0 :(得分:2)

扩展Scott的答案,你可以在 app / helpers / navigation_helper.rb 中创建一个帮助器,例如:

module NavigationHelper
    def current_location?(*args)
        options = args.extract_options!
        options.each do |key, val|
            return false unless eval("controller.#{key.to_s}_name") == val
        end
        true
    end
end

并以这种方式使用它:

current_location?(controller: 'my_controller', action: 'new')
current_location?(controller: 'my_controller')
current_location?(action: 'new')

在您的视图中,您可以执行以下操作:

# Change this according what your really need
if current_location?(controller: 'sessions', action: 'new')

希望它有所帮助; )

答案 1 :(得分:0)

如果查看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_namecontroller.action_name。不完全优雅,但它会更可靠。