Метод, который вы использовали, scope :search_query...
, предназначен для поиска входного текста в одном из двух указанных вами столбцов базы данных, users.mother_tongue
и users.locality
.В результате полученное предложение where будет "WHERE LOWER(users.mother_tongue) LIKE ? OR LOWER(users.locality) LIKE ?"
.
. Если вы хотите отфильтровать значения 2 полей отдельно, вы должны определить 2 поля ввода с разными именами, 2 фильтра и 2 области действия.
Код может быть таким:
Модель user.rb:
filterrific(
default_filter_params: {},
available_filters: [
:with_mother_tongue,
:with_locality,
:with_start_time_gte
]
)
scope :with_mother_tongue, -> (search_string) {
where("users.mother_tongue ILIKE ?", (search_string.to_s.gsub('*', '%') + '%').gsub(/%+/, '%'))
}
scope :with_locality, -> (search_string) {
where("users.locality ILIKE ?", (search_string.to_s.gsub('*', '%') + '%').gsub(/%+/, '%'))
}
scope :with_start_time_gte, lambda { |ref_date|
where('availability.start_time >= ?', ref_date)
}
В индексном представлении вы также должны визуализировать _list частично (см. В конце):
index.html.erb:
<% provide(:title, 'Liste des utilisateurs') %>
<h1>Liste des utilisateurs :</h1>
<%= form_for_filterrific @filterrific, html: { id: 'filterrific-no-ajax-auto-submit' } do |f| %>
<div>
Langue :
<%= f.text_field(
:with_mother_tongue,
class: 'mother_tongue filterrific-periodically-observed'
) %>
</div>
<div>
Ville :
<%= f.text_field(
:with_locality,
class: 'locality filterrific-periodically-observed'
) %>
</div>
<div>
Date de départ :
<%= f.text_field(:with_start_time_gte, class: 'js-datepicker') %>
</div>
<%= f.submit 'Rechercher' %>
<div>
<%= link_to(
'Reset filters',
reset_filterrific_url,
) %>
</div>
<%= render_filterrific_spinner %>
#filterrific_results
= render 'users/list', users: @users
И, наконец, вам нужно определить представление js, вызываемое действием index в контроллере, когда вы фильтруете записи, заполняющие хотя бы одну изфильтрует поля ввода:
index.js.erb
<% js = escape_javascript (
render(partial: 'users/list', locals: {users: @users})
) %>
$("#filterrific_results").html("<%= js %>");