首页 > 解决方案 > 将数组放入 HTTParty API 调用参数会引发“args.ids.split is not a function”错误。我该如何解决?

问题描述

我有一个调用函数value,它返回下面的数组:

[1893, 1724, 257344, 353491, 301337, 305470, 348, 264660, 76341, 68726]

但是为了更清楚,这里是value function返回value array上面的:它是一个像ListInfoService下面的模块,有 4 个参数,它们是下面的 values 方法中提供的参数ValueSearchService::ValueSearch.new(params[:one], params['two'] = 1_000_000, params[:three], params[:four]).values

def value
    params = set_params_if_not_added
    value_search = ValueSearchService::ValueSearch.new(
      params[:one],
      params['two'] = 1_000_000,
      params[:three],
      params[:four]
    ).values
    value_search['data']
  end

我还有一个函数,其中参数ids应该取值的结果(即逗号分隔的数字):

module ListInfoService
  class ListInfo
    include HTTParty
    base_uri 'localhost:7000'

    def initialize(ids, limit, offset)
      @options = { query: { ids: ids, some_params: some_params, another_params: another_params } }
    end

    def movies
      self.class.get('/list', @options)
    end
  end
end

我解释为使上述模块功能的 URL 是:

localhost:7000/list?ids=2,3,6&some_params=5&another_params=0

但是当我通过将value结果放入下面的函数调用中来调用该函数时,我得到了args.ids.split is not a function错误:

list_info = ListInfoService::ListInfo.new(
   value,
   params[:some_params],
   params[:another_params]
).movies

render json: list_info

那么如何确保我的ids论点采用逗号分隔的数字列表?

注意:我正在使用 HTTParty、Rails5.1、Ruby 2.6

value我认为问题在于我在内部提供ListInfoService::ListInfo的用于搜索 api的数组。如果我可以改变我在模块中调用我的 api 的方式,或者找到一种方法来提供所需的逗号分隔的 id 列表,那么它将起作用。

标签: ruby-on-railsruby

解决方案


固定的。这就是我为完成这项工作所做的。请记住,此错误是由于将数组传递到 HTTParty API 调用参数而引发的。因此args.ids.split is not a function错误。

为我解决这个问题只需将其转换为valuestring而不是array仅添加.join(', ')到方法中的响应。见下文:

  def value
    params = set_params_if_not_added
    value_search = ValueSearchService::ValueSearch.new(
      params[:one],
      params['two'] = 1_000_000,
      params[:three],
      params[:four]
    ).values
    value_search['data'].join(', ') # This will solve it.
  end

因此,当您将value结果附加到已定义的 HTTParty 模块调用ids参数时,它会将其作为字符串并且工作正常。

list_info = ListInfoService::ListInfo.new(
  value, # Note that this line is `ids` under ListInfoService::ListInfo argument and cant be array.
  params[:some_params], 
  params[:another_params]).movies 

render json: list_info

推荐阅读