【发布时间】:2020-04-01 02:03:19
【问题描述】:
当您像这样查询结果时,我似乎无法让 find_by 工作
GET /users.json?first_name=Tyrone&last_name=Slothrop"
应该返回名字为 Tyrone 且姓氏为 Slothrop 的用户。
它返回 null,因为该查询中的所有参数都是 null,除了 first_name 和 last_name。我坚持让它接受唯一的查询参数并按这些参数进行搜索。有什么建议吗?
class Api::V1::UsersController < ApplicationController
def index
@users = User.find_by(id: params[:id], first_name: params[:first_name],
last_name: params[:last_name], email: params[:email],
city: params[:city], state: params[:state])
respond_to do |format|
format.json { render json: @users.to_json, status: :ok }
end
end
end
这里是 mt full repo https://github.com/jslack2537/apiDemoApp 的链接
请求的开发日志输出
Started GET "/api/v1/users.json?first_name=Tyrone&last_name=Slothrop" for 10.0.2.2 at 2020-04-01 02:42:17 +0000
Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Api::V1::UsersController#index as JSON
Parameters: {"first_name"=>"Tyrone", "last_name"=>"Slothrop"}
[1m[36mUser Load (4.4ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" IS NULL AND "users"."first_name" = ? AND "users"."last_name" = ? AND "users"."email" IS NULL AND "users"."city" IS NULL AND "users"."state" IS NULL LIMIT ?[0m [["first_name", "Tyrone"], ["last_name", "Slothrop"], ["LIMIT", 1]]
↳ app/controllers/api/v1/users_controller.rb:5
Completed 200 OK in 7ms (Views: 0.1ms | ActiveRecord: 4.4ms)
编辑*** 我现在收到更新代码的错误 NoMethodError(nil:NilClass 的未定义方法 `split'):
class Api::V1::UsersController < ApplicationController
def index
ids = params[:id].split(",")
if params[:id].present?
@users = User.where(user_params.merge!(id: ids)).paginate(:per_page => params[:size], :page => params[:page]).order('id DESC')
respond_to do |format|
format.json { render json: @users.to_json, status: :ok }
end
else
@users = User.where(user_params).paginate(:per_page => params[:size], :page => params[:page]).order('id DESC')
respond_to do |format|
format.json { render json: @users.to_json, status: :ok }
end
end
end
private
def user_params
params.permit(:first_name, :last_name, :email, :city, :state)
end
end
【问题讨论】:
-
您是如何发送请求的?另外,如果您查看 rails 服务器日志,您会得到什么,我猜您正在接收未经许可的参数,您可以验证日志吗?
-
我正在使用邮递员发送请求,这是请求中日志输出的内容,请将其添加到我原始帖子的底部
-
我刚刚克隆了你的仓库并让它工作,请检查下面的答案。
标签: ruby-on-rails json activerecord