如何将params发送到方法?

时间:2016-01-14 15:31:59

标签: ruby google-api-client google-api-ruby-client

我正在尝试使用Ruby Client对Webmaster Tool api进行查询。

params = {
  start_date: "2015-01-14",
  end_date: "2015-01-14"
}

AuthWebmastersService.query_search_analytics("http://www.ex.com/", params)

当我尝试提出请求时,我会ArgumentError (unknown keywords: start_date, end_date),为什么会发生这种情况?

Here是方法定义。

4 个答案:

答案 0 :(得分:2)

它没有按预期工作,因为Ruby会将您的哈希转换为关键字参数,即

query_search_analytics("...", {start_date: "2015-01-14", end_date: "2015-01-14"})

变为:

query_search_analytics("...", start_date: "2015-01-14", end_date: "2015-01-14")

要获得预期结果,您必须附加一个空哈希:

query_search_analytics("http://www.ex.com/", params, {})

答案 1 :(得分:1)

此错误: ArgumentError (unknown keywords: start_date, end_date) 告诉你,你指定了错误的关键字属性。

您的方法需要:

def query_search_analytics(site_url, search_analytics_query_request_object = nil, fields: nil, quota_user: nil, user_ip: nil, options: nil, &block)
  • site_url作为第一个参数
  • search_analytics_query_request_object - 作为第二个参数,默认值为nil
  • 多个关键字参数(和块)

当你像你写的那样打电话给你的方法时:

  • site_url将有价值" http://www.ex.com/"
  • search_analytics_query_request_object将为nill
  • 和hash将应用于关键字参数,而ruby将引发错误,因为没有startDate和endDate关键字参数

您需要做的是:

query_search_analytics("http://www.ex.com/", options: params)

答案 2 :(得分:0)

这是一个红宝石问题,如果是哈希值,则自动扩展最后一个参数。

两个解决方法:

1 - 使用适当的对象而不是哈希:

params = Google::Apis::WebmastersV3::SearchAnalyticsQueryRequest.new(
  start_date: "2015-01-14",
  end_date: "2015-01-14"
)

AuthWebmastersService.query_search_analytics("http://www.ex.com/", params)

2 - 将空哈希附加为参数:

params = {
  start_date: "2015-01-14",
  end_date: "2015-01-14"
}

AuthWebmastersService.query_search_analytics("http://www.ex.com/", params, {})

答案 3 :(得分:-1)

因为它只接受关键字参数fieldsquota_useruser_ipoptionsstart_dateend_date不在其中