为这样一个简单的问题道歉,但由于我的RoR知识基本上不存在,我无法在数小时后自己解决。在我使用的Rails应用程序中,已使用导航助手突出显示活动菜单:
def nav_link(link_text, link_path, ico_path)
class_name = current_page?(link_path) ? 'active' : nil
content_tag :li do
link_to(link_path, class: class_name) do
image_tag("icons/#{ico_path}.svg") + content_tag(:span, link_text)
end
end
end
情况发生了变化,current_page?
不再是一个可行的选择,因为路由现在在前端处理。有没有办法通过检索,例如,当前网址并检查link_path
?来实现相同的功能。我已经尝试了很多与request.original_url
等不同助手的事情,但无济于事。
答案 0 :(得分:7)
request.original_url
应根据文档工作。
将原始请求URL作为字符串
返回
http://apidock.com/rails/ActionDispatch/Request/original_url
您还可以尝试使用不同变量进行字符串连接。
request.host + request.full_path
如果这也不起作用,您可以尝试
url_for(:only_path => false)
;
答案 1 :(得分:3)
使用
request.url
http://api.rubyonrails.org/classes/ActionDispatch/Http/URL.html#method-i-url
或
request.path
http://www.rubydoc.info/gems/rack/Rack/Request#path-instance_method
答案 2 :(得分:2)
您需要查看active_link_to
gem:
def nav_link(link_text, link_path, ico_path)
content_tag :li do
active_link_to link_path do
image_tag("icons/#{ico_path}.svg") + content_tag(:span, link_text)
end
end
end
与current_page?
助手不同,active_link_to
使用控制器操作和模型对象来确定您是否在特定页面上。
current_page?
只针对当前路径进行测试,如果您正在处理模糊或混淆的路线,则会让您暴露。
-
我打算写current_page?
如何运作等等,但既然你提到它是不可行的,我就不会。我不得不质疑为什么它不可行但是......
路由现在在前端处理。
当然即使你使用像Angular和Rails这样的东西,你也必须为你的应用设置路线?