Хорошо, вы должны попытаться найти пользователей по параметрам поиска, например, если gender=Female
возвращает всех пользователей, что Females
, верно?Затем следуйте инструкциям.
В search_controller
вы возвращаете всех пользователей на основе параметров
def index
if params[:username] || params[:gender].present?
@users = User.where('true').paginate(page: params[:page], per_page: 10)
@users = @users.where(username: params[:username]) unless params[:username].blank?
@users = @users.where(gender: params[:gender]) unless params[:gender].blank?
else
@users = User.all.paginate(page: params[:page], per_page: 10)
end
end
, затем searches/index.html.erb
, как это, так же, как ваш users
<ul class="users">
<% @users.each do |user| %>
<%= user.username %>
..........
<% end %>
</ul>
Вышеуказанная часть была только для поиска User
.Теперь, если вам нужно сохранить эти параметры поиска, используйте следующее:
Search.create(username: params[:username],gender: params[:gender])
. Эти параметры будут сохраняться при каждом поиске.Тогда действие index будет выглядеть так:
def index
if params[:username] || params[:gender].present?
@users = User.where('true').paginate(page: params[:page], per_page: 10)
@users = @users.where(username: params[:username]) unless params[:username].blank?
@users = @users.where(gender: params[:gender]) unless params[:gender].blank?
Search.create(username: params[:username],gender: params[:gender])
else
@users = User.all.paginate(page: params[:page], per_page: 10)
end
end
Надеюсь, это то, что вы хотите.
Обновление
Прежде всего, у вас естьпропустил что-то вроде того, что вы использовали
@search = User.where('true').paginate(page: params[:page], per_page: 10)
@search = User.where(username: params[:username]) unless params[:username].blank?
@search = User.where(gender: params[:gender]) unless params[:gender].blank?
в приведенном выше коде, это будет работать только для одной строки, не объединяющей три строки, потому что вы отделили модель User
вместо
@search = User.where('true').paginate(page: params[:page], per_page: 10)
@search = @search.where(username: params[:username]) unless params[:username].blank?
@search = @search.where(gender: params[:gender]) unless params[:gender].blank?
, который комбинируется, как при установке username
, он будет работать, а при установке gender
также будет работать, но ваш код всегда выполняет последнюю строку.
Новый запрос предназначен дляsearch (Вы можете использовать, если вам нужно)
@search = User.where(username: params[:username]).where(gender: params[:gender]).paginate(page: params[:page], per_page: 10)
Этот запрос эквивалентен
SELECT "users".* FROM "users" WHERE "users"."username" = 'xyz' AND "users"."gender" = 'xyz'"
, он выполнит условие, и как username
и gender
должны совпадать, иначеfalse
Точка 2 Пока вы используете оператор like
и знак процента %male%
, он будет искать любые значения, имеющие male
в любой позиции, когда он находится в списке женский и вы мужской он будет соответствовать, потому что женский заботливыйth мужской , поэтому результаты поиска возвращают женский , пока вы ищете мужской , вам нужен точный поиск, как показано ниже.
Пожалуйста, сообщите, если вас неправильно понялиили я.
@search = User.where(username: params[:username]).where(gender: params[:gender]).paginate(page: params[:page], per_page: 10)