Я полагаю, что вы должны разрешить параметры, я загрузил ваше хранилище и смог получить нужный запрос, разрешив параметры, например:
class Api::V1::UsersController < ApplicationController
def index
@users = User.find_by(user_params)
respond_to do |format|
format.json { render json: @users.to_json, status: :ok }
end
end
private
def user_params
params.permit(:first_name, :last_name, :email, :city, :state)
end
end
Теперь, если вы попробуете этот запрос http://localhost:3000/api/v1/users?first_name=Tyrone&last_name=Slothrop&city=Chicago
в журналах вы должны увидеть, что единственные переданные вами параметры используются для поиска:
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."first_name" = ? AND "users"."last_name" = ? AND "users"."email" = ? AND "users"."city" = ? LIMIT ? [["first_name", "Tyrone"], ["last_name", "Slothrop"], ["email", "jean@email.com"], ["city", "Chicago"], ["LIMIT", 1]]
↳ app / controllers / api / v1 / users_controller.rb: 11
Rails просто разрешает параметры, определенные в user_params, поэтому, если они отсутствуют, они будут просто проигнорированы
Редактировать: вернуть список совпадений, которые вы должны использовать, где:
def index
@users = User.where(user_params)
respond_to do |format|
format.json { render json: @users.to_json, status: :ok }
end
end
Чтобы разрешить несколько параметров, например, разрешить несколько полей first_name, вы можете сделать:
def user_params
params.permit(:last_name, :email, :city, :state, first_name: [])
end
Не забудьте поместить элементы массива в конец разрешения, чтобы избежать синтаксических ошибок, и после этого вы можете запросите имя наподобие этого: http://localhost:3000/api/v1/users?first_name[]=John&first_name[]=Jean
,
Этот URL может быть довольно утомительным для создания, поэтому я хотел бы предложить, что если вы создаете API, вы всегда можете отправлять параметры в теле требуемого То есть, вот так:
{
"first_name": ["John", "Jean"]
}
И это будет иметь точное поведение для передачи параметров в URL.
Если вы строго хотите отправить идентификатор как id = 1,2, 3, что вы можете сделать что-то вроде:
class Api::V1::UsersController < ApplicationController
def index
ids = params[:id].split(",")
@users = User.where(user_params.merge!(id: ids))
respond_to do |format|
format.json { render json: @users.to_json, status: :ok }
end
end
private
def user_params
params.permit(:last_name, :email, :city, :state, :first_name)
end
end
user_params.merge! сделает свое дело, так как он перезапишет или добавит ключ id к вашим user_params ha sh.