Rails настраивают параметры и класс на основе текущих параметров - PullRequest
0 голосов
/ 12 января 2020

Использование Rails 6. У меня есть следующее на мой взгляд:

    <% @searchable_types.each do |obj| %>
      <% if params[:type] == obj.searchable_type %>
        <a href="<%= search_path(q: params[:q]) %>" class="btn btn-outline-secondary border rounded-pill active"><%= obj.searchable_type %></a>
      <% else %>
        <a href="<%= search_path(q: params[:q], type: obj.searchable_type) %>" class="btn btn-outline-secondary border rounded-pill"><%= obj.searchable_type %></a>
      <% end %>
    <% end %>

Что этот код выполняет в качестве переключающего фильтра:

  1. Удалите параметр в search_path если он уже активен
  2. Добавьте параметр в search_path, если он не активен

Код определенно не элегантен. Как я могу изменить параметры search_path, не используя такое явное условное выражение?

1 Ответ

0 голосов
/ 12 января 2020

Не лучше, но избегая дублирования:

<%
  link_class        = 'btn btn-outline-secondary border rounded-pill'
  active_link_class = "#{link_class} active"
%>
<% @searchable_types.each do |obj| %>
  <%
    is_active   = params[:type] == obj.searchable_type
    link_params = { q: params[:q] }
    link_params.merge!(type: obj.searchable_type) unless is_active
  %>
  <%= link_to search_path(link_params), obj.searchable_type, class: is_active ? active_link_class : link_class %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...