我根据当前页面在导航栏中显示某些项目。当我进入登录页面时,会显示正确的项目。如果我使用错误的密码登录,则项目会发生变化且不正确。
在我的HTML中,我检查if (current_page?(new_user_session_path))
提交错误密码并重新加载页面后,此条件不会返回true并且在导航栏中显示错误的项目。我查看了服务器日志上的请求并且我猜测它是因为在POST之后第二次加载页面(密码提交失败)。我需要第二次检查不同的路径吗?
答案 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_name
和controller.action_name
。不完全优雅,但它会更可靠。