Я написал следующий код для создания пользовательского интерфейса, который позволяет добавлять и удалять фильтры из строки запроса:
<% @colours.each do |colour| %>
<% if params[:colour].include?(colour) %>
<% # Already being filtered. Show remove link. %>
<% modified_params = params.dup %>
<% modified_params[:colour].delete_if {|v| v == colour } %>
<%= link_to "Remove #{colour}", modified_params %>
<% else %>
<% # Not being filtered. Show add link. %>
<%= link_to "Add #{colour}", params.merge('colour[]' => colour) %>
<% end %>
<% end %>
При нажатии на ссылку «Добавить» фильтр добавляется в строку запроса; щелчок по ссылке «Удалить» находит и удаляет фильтр из строки запроса.
Это отлично работает, но все выглядит довольно грязно для меня. Я ищу предложения по улучшению этого кода. Возможно, есть лучший способ достигнуть этого вообще, или возможно драгоценный камень, который я пропустил.
Любые отзывы приветствуются, так как я относительно новичок в Ruby и Rails.
Большое спасибо.
Обновление
Просто для пояснения, пример строки запроса может быть следующим:
?colour[]=Red&colour[]=Green&colour[]=Blue&size[]=Very+small&size[]=Small
Каждая ссылка фильтра должна продолжать сохранять другие параметры, присутствующие в строке запроса.