Rails将类添加到活动URL链接

bra*_*r19 1 haml ruby-on-rails

在我的布局应用程序中,我有这样的代码:

%li
   = link_to "???????", all_articles_path(id: 1)
%li
   = link_to "????-??????", all_articles_path(id: 2)
%li
   = link_to "VIP-??????????", advanced_search_show_path(by_vip: true)
Run Code Online (Sandbox Code Playgroud)

例如,如果我去url"all_articles_path(id:1)"我需要添加类来链接"活动",但我怎么能这样做?我只有以下想法:

- if request.original_url.include? ("all_articles/1")
  = link_to "???????", all_articles_path(id: 1), class: "active"
Run Code Online (Sandbox Code Playgroud)

但我认为这是一个坏主意,也许有任何其他更好的解决这个问题?

Raj*_*ngh 7

使用Rails的current_page? 方法,

class: <%= "active" if current_page?(all_articles_path) %>
Run Code Online (Sandbox Code Playgroud)

要在HAML中使用此方法,您可以使用字符串插值:

class: "#{'active' if current_page?(all_articles_path)}"
Run Code Online (Sandbox Code Playgroud)

  • 如果你有几个你应该执行这种检查的链接,你可以定义包装`link_to`的辅助方法并执行`current_page的检查? (2认同)

Ric*_*eck 5

有一个更好的方法: active_link_to

这个宝石是惊人的 - 你只需要使用= active_link_to "link", path()帮助器,它将提供一个活跃的类.我们在商业应用程序中使用它,它开箱即用

current_page?到目前为止,它比方法更好


更新

根据评论,条件样式将是这样的:

<% if defined?(params[:by_vip]) || defined?(params[:other])  %>
  <% active_class = "active" %>
<% end %>

<%= link_to "your_link, "#", class: active_class %>
Run Code Online (Sandbox Code Playgroud)

是的,它是基本的,它可以放入帮手,但我希望它能告诉你你能做什么!