Я работаю над приложением и пытаюсь реализовать фильтр для моего индекса пользователей.Я пробую много решений в Интернете, но не успешно.Мне нужно отфильтровать по номеру mother_tongue, по месту и по доступности (по календарю).
Сначала я попробую с простое решение для формы поиска , но я думаю, что это не лучшее решение, поэтомуЯ пытаюсь использовать решение Джастина Вайса , но оно не работает, поэтому я пытаюсь установить собственные фильтры в своей пользовательской модели, но безуспешно:
модель:
include Filterable
def self.apply_filters(params)
user = self
user = user_by_mother_tongue(mother_tongue: params[:mother_tongue]) if params[:mother_tongue].present?
user = user_by_locality(locality: params[:locality]) if params[:locality].present?
user
end
Будучи заблокированным, я решил прикопаться в фильтры mother_tongue и locality и сохранить календарь фильтров на будущее, однако я не могу найти выход ...
мой контроллер пользователей:
до:
def index
@users = User.where(activated: true).paginate(page: params[:page])
end
после:
def index
@users = User.filter(params.slice(:mother_tongue, :locality))
end
index.html.erb:
<% provide(:title, 'Liste des utilisateurs') %>
<h1>Liste des utilisateurs :</h1>
<%= form_tag(users_path, method: :get) do %>
<%= label_tag :mother_tongue, "Langue :" %>
<%= text_field_tag :mother_tongue, params[:mother_tongue] %>
<%= label_tag :locality, "Ville :" %>
<%= text_field_tag :locality, params[:locality] %>
<%= submit_tag 'Search', name: nil %>
<% end %>
<table>
<thead>
<tr>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<% for user in @users %>
<div class='user'>
<strong> <%= user.fname %> </strong>
</div>
<%= link_to 'Savoir plus', user_path(user) %>
<% end %>
</tr>
</tbody>
модели / концерна / filterable.rb:
module Filterable
extend ActiveSupport::Concern
module ClassMethods
def filter(filtering_params)
results = self.where(nil)
filtering_params.each do |key, value|
results = results.public_send(key, value) if value.present?
end
results
end
end
end
Заранее спасибо за помощь!
UsersController:
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update, :destroy]
before_action :correct_user, only: [:edit, :update]
before_action :admin_user, only: [:index, :destroy]
def first; end
def second; end
def third; end
...
def index
@users = User.filter(params.slice(:mother_tongue, :locality))
end
...
private
def user_params
params.require(:user).permit(:fname, :lname, :email, :password,
:password_confirmation, :photo, :birthdate, :mother_tongue, :coach, :phone, :street_number, :locality, :route, :administrativearea_level_1, :country, :postal_code, spoken_language_ids:[])
end
...
end