Совместите Scope и поиск по рельсам - PullRequest
0 голосов
/ 21 июня 2020

Я хотел бы объединить свой результат поиска с областью, выбранной пользователем. Например, пользователь выполняет поиск по запросу «Ресторан» и щелкает ссылку «Игрушка», чтобы получить результат Ресторан с игрушкой.

Кто-нибудь знает, как это объединить?

Спасибо!

Модель

scope :filter_by_toy, -> { where(toy: true) }
scope :filter_by_play_area, -> { where(play_area: true) }

Контроллер

def index
  @places = policy_scope(Place)
  @places = Place.all
  @places = Place.global_search(params[:query]) unless params[:query].blank?

  #scope filtering
  if params[:toy]
    @places = @places.filter_by_toy
  end

if params[:play_area]
    @places = @places.filter_by_play_area
  end
end

Просмотр

<%= form_for :search, url: places_path, class: "search-form", method: :get do %>
  <div class="search-box">
      <%= text_field_tag :query, params[:query],
        class: "search-input placeholder-search",
        placeholder: "City, place name, type..."%>
      <button type="submit" class="search-submit"><i class="fas fa-search"></i></button>
  </div>
<% end %>

<%= link_to 'Toy', places_path(:toy => true) %>
<%= link_to 'Play Area', places_path(:play_area => true) %>

1 Ответ

0 голосов
/ 21 июня 2020

Обычно формы работают следующим образом: вы нажимаете «отправить», и все значения в форме (из полей ввода, флажков и т. Д. c) отправляются на сервер одним пакетом. Вы можете узнать больше о формах здесь: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form

Специально для вашей проблемы вы можете заменить свои ссылки флажками, используя check_box_tag, и переместить их внутри формы. Подробнее: https://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method -i-check_box_tag

<%= form_for :search, url: places_path, class: "search-form", method: :get do %>
  <div class="search-box">
      <%= text_field_tag :query, params[:query],
        class: "search-input placeholder-search",
        placeholder: "City, place name, type..."%>
      <%= check_box_tag "toy" %>
      <%= check_box_tag "play_area" %>
      <button type="submit" class="search-submit"><i class="fas fa-search"></i></button>
  </div>
<% end %>
...