使用参数结果在json中按计数进行搜索

时间:2018-02-01 02:17:49

标签: ruby-on-rails json ruby rails-api

我试图在我的json中实现一个反向过滤器。当我访问网址api/v1/contacts?Results=2 [原文如此]时,我想从我的json中得到两个结果。

为此,我在我的控制器中创建了两个方法:一个从数据库获取信息并将渲染器转换为json的索引,以及一个返回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的第一个结果。如果我没有在网址中输入results =,则会将@number_results设置为3,并在屏幕上显示四个结果。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

首先,在您建议的网址中,&#34;结果&#34;资本化。如果您打算提交它,那么您需要在后端以这种方式搜索它。但是,由于您的所有代码都使用小写&#34;结果&#34;,我们将继续使用它。您应该以相同的方式修改您的网址:resources :authors do resources: posts end

如果这是您的网址的样子,那么您传入的号码可以在api/v1/contacts?results=2中访问。如果您未传递参数,则params[:results]将返回params[:results]。在检查其存在之前,请不要在该参数上调用nil,因为#to_inil.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方法。您还可以摆脱#results回调。