使用参数结果按 json 中的计数进行搜索
Doing search by count in json with params results
我正在尝试在 json 中实施计数器过滤器。当我访问 url api/v1/contacts?Results=2
[sic] 时,我只想从我的 json.
中获得两个结果
为此,我在我的控制器中创建了两个方法:一个从数据库中获取信息并将渲染转换为 json 的索引,以及一个 returns json 返回。
class Api::V1::ContactsController < ApplicationController
before_action :results, only: [:index]
def index
@contacts = Contact.all
render json: {results: @contacts[0..@number_results]}
end
def results
if params[:results]
results = params[:results]["results"]
@number_results = results.to_i
else
@number_results = 3
end
end
end
不管为 results =
输入的值如何,@number_results
的值设置为 0
,所以每当我输入 results = I
时,只得到第一个结果json。如果我不在 url 中键入 results =
,它会将 @number_results
设置为 3
,并在屏幕上显示四个结果。
有人能帮忙吗?
首先,在你提出的url中,"Results"是大写的。如果这就是您打算提交的方式,那么您需要在后端以这种方式进行搜索。但由于您的所有代码都使用小写字母 "results",我们将采用它。您应该以相同的方式修改您的 url:api/v1/contacts?results=2
.
如果这就是您的 url 的样子,那么您输入的号码可以在 params[:results]
中访问。如果不传递任何参数,则 params[:results]
将 return nil
。在检查它是否存在之前,不要在参数上调用 #to_i
,因为 nil.to_i
是 0
。
综上所述,这可能是您想要的:
class Api::V1::ContactsController < ApplicationController
def index
number_results = params[:results] || 3
@contacts = Contact.all.limit(number_results.to_i)
render json: {results: @contacts}
end
end
如果params[:results]
的结果是nil
,则number_results
赋值3
。
现在我们使用 #limit
来 return 仅请求的联系人数量。这允许我们完全取消 #results
方法。您还可以摆脱 before_action
回调。
我正在尝试在 json 中实施计数器过滤器。当我访问 url api/v1/contacts?Results=2
[sic] 时,我只想从我的 json.
为此,我在我的控制器中创建了两个方法:一个从数据库中获取信息并将渲染转换为 json 的索引,以及一个 returns json 返回。
class Api::V1::ContactsController < ApplicationController
before_action :results, only: [:index]
def index
@contacts = Contact.all
render json: {results: @contacts[0..@number_results]}
end
def results
if params[:results]
results = params[:results]["results"]
@number_results = results.to_i
else
@number_results = 3
end
end
end
不管为 results =
输入的值如何,@number_results
的值设置为 0
,所以每当我输入 results = I
时,只得到第一个结果json。如果我不在 url 中键入 results =
,它会将 @number_results
设置为 3
,并在屏幕上显示四个结果。
有人能帮忙吗?
首先,在你提出的url中,"Results"是大写的。如果这就是您打算提交的方式,那么您需要在后端以这种方式进行搜索。但由于您的所有代码都使用小写字母 "results",我们将采用它。您应该以相同的方式修改您的 url:api/v1/contacts?results=2
.
如果这就是您的 url 的样子,那么您输入的号码可以在 params[:results]
中访问。如果不传递任何参数,则 params[:results]
将 return nil
。在检查它是否存在之前,不要在参数上调用 #to_i
,因为 nil.to_i
是 0
。
综上所述,这可能是您想要的:
class Api::V1::ContactsController < ApplicationController
def index
number_results = params[:results] || 3
@contacts = Contact.all.limit(number_results.to_i)
render json: {results: @contacts}
end
end
如果params[:results]
的结果是nil
,则number_results
赋值3
。
现在我们使用 #limit
来 return 仅请求的联系人数量。这允许我们完全取消 #results
方法。您还可以摆脱 before_action
回调。