В моем приложении rails есть функция «расширенного поиска», где пользователи могут фильтровать результаты. страница находится по адресу https://myurl/users/search
. Фильтр формы поиска работает нормально и перенаправляет на https://myurl/users
, который является страницей указателя, показывающей отфильтрованные результаты.
Меня беспокоит только то, что URL заполняется всеми пустыми параметрами, когда пользователь не выбрал значения для таких параметров, как этот https://myurl/users?cert=CCNA&ed=&ex=&job=NetworkEng&lang=&maj=&s=&u=
я хотел бы видеть только те параметры, которые имеют значение. Например https://myurl/users?cert=CCNA&job=NetworkEng
вот пример того, что я имею в виду. Это создаст кнопку с поисковым термином в нем, который выбрал пользователь, и при нажатии на кнопку этот конкретный поисковый фильтр будет удален.
Я бы хотел, чтобы только параметры, которые пользователь фактически заполнил, отображались в URL, если это возможно, и скрывали все остальные. Я думаю, что, возможно, мне нужно как-то использовать hidden_field_tag
или, возможно, проверить, что каждое значение присутствует, прежде чем показывать в link_to?
В настоящее время, если я не перечисляю все параметры в link_to, тогда, когда пользователь нажимает кнопку, чтобы удалить один поисковый фильтр, все они удаляются.
<% if params[:job].present? %>
<%= link_to users_path( c: params[:c], ex: params[:ex], s: params[:s], sk: params[:sk], lang: params[:lang],
cert: params[:cert], u: params[:u], relo: params[:relo], ed: params[:ed], maj: params[:maj], user_search: params[:user_search] ) , class: "btn btn-outline-danger" do %>
<i class="fa fa-times"></i> <%= "#{params[:job]}" %>
<% end %>
<% end %>
<% if params[:user_search].present? %>
<%= link_to users_path( c: params[:c], ex: params[:ex], s: params[:s], sk: params[:sk], lang: params[:lang],
cert: params[:cert], u: params[:u], relo: params[:relo], ed: params[:ed], maj: params[:maj], job: params[:job] ) , class: "btn btn-outline-danger" do %>
<i class="fa fa-times"></i> <%= "#{params[:user_search]}" %>
<% end %>
<% end %>
пример того, что есть в моем users_controller
if params[:user_search].present?
@users = @users.by_keyword(params[:user_search])
end
пример областей применения в моей пользовательской модели
scope :by_will_relocate, ->(relo) { where(will_relocate: true).order(updated_at: :desc) if relo.present? }
scope :by_current_job_title, ->(job) { where('current_job_title LIKE ?', "%#{job}%").order(updated_at: :desc) if job.present? }
scope :by_keyword, ->(k) { by_skill(k) | by_language(k) | by_certification_or_cert_authority(k) | by_education_level(k) | by_university_major(k)}