【问题标题】:Doing search by count in json with params results使用参数结果在 json 中按计数进行搜索
【发布时间】:2018-02-01 02:17:49
【问题描述】:

我正在尝试在我的 json 中实现一个计数器过滤器。当我访问 url api/v1/contacts?Results=2 [sic] 时,我只想从我的 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 的第一个结果。如果我不在 url 中输入results =,它会将@number_results 设置为3,并在屏幕上显示四个结果。

谁能帮忙?

【问题讨论】:

  • 什么版本的导轨?
  • 您在寻找什么结果?你能给出预期的结果吗?我不清楚你想得到什么结果?如何从 url api / v1 / 联系人?你最终得到了结果 2?
  • @whodini9 rails 4

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


【解决方案1】:

首先,在您建议的网址中,“结果”大写。如果这是您打算提交的方式,那么您需要在后端以这种方式搜索它。但是由于您的所有代码都使用小写的“结果”,我们将继续使用它。您应该以相同的方式修改您的网址:api/v1/contacts?results=2

如果您的网址是这样的,那么您传入的号码可以在params[:results] 中访问。如果不传递任何参数,则params[:results] 将返回nil。在检查参数是否存在之前,不要在参数上调用#to_i,因为nil.to_i0

说了这么多,这就是你可能想要的:

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 方法。您还可以摆脱 before_action 回调。

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多