Rails当前的url帮助器

时间:2016-01-11 02:56:06

标签: ruby-on-rails url

为这样一个简单的问题道歉,但由于我的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等不同助手的事情,但无济于事。

3 个答案:

答案 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)

答案 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这样的东西,你也必须为你的应用设置路线?