логический атрибут фильтра рельсов - PullRequest
0 голосов
/ 11 апреля 2020

Мне нужно добавить фильтр в форму поиска. Мне нужно, чтобы мой поиск мог отфильтровать место, где есть «игрушка» или «стульчик». Я немного запутался, как создать условие if else в контроллере, если пользователь добавил один из фильтров, оба или ни одного.

Places
t.string "name"
t.string "address"
t.float "latitude"
t.float "longitude"
t.bigint "user_id"
t.boolean "toy", default: false
t.boolean "high_chair", default: false

// Controller
def index
 @places = policy_scope(Place)
 @text_search = params[:search]

 if @text_search.present?
  @places = Place.global_search(params[:search]).where(type: @types).where(toy: 
  params[:toy].where(high_chair: params[high_chair])
 else
  @places = Place.all
  @result = "No Result"
 end
end

// View
<%= form_tag(places_path, method: :get, class: "search-form") do %>
 <div class="search-input">
  <%= text_field_tag :search, params[:search],
                     class: "search-input form-control",
                     placeholder: "Type your city...'"%>
  <%#= check_box_tag(:toy) %>
  <%#= label_tag(:toy, "Toys") %>
  <%#= check_box_tag(:high_chair) %>
  <%#= label_tag(:high_chair, "High Chair") %>
  <%= submit_tag "?", class: "search-submit btn-search"  %>
 </div>
<% end %>

1 Ответ

0 голосов
/ 11 апреля 2020

Я предлагаю вам использовать Ransack самоцвет, было бы проще.

// View
<%= search_form_for @query, url: places_path, method: :get, class: "search-form" do |f| %>
  <%= f.label :high_chair_true %>
  <%= f.check_box :high_chair_true %>
  <%= f.label :high_chair_false %>
  <%= f.check_box :high_chair_false %>
  <%= f.label :toy_true %>
  <%= f.check_box :toy_true %>
  ...
  <%= f.submit "search" %>
<% end %>

// Controller
def index
  @query = Place.ransack(params[:query])
  @places = @query.result
end

играйте с комбинациями в соответствии с вашими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...