如何将参数发送到方法?

How to send params to a method?

我正在尝试使用 Ruby 客户端向网站站长工具 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是方法定义。

因为它只接受关键字参数fieldsquota_useruser_ipoptions,而start_dateend_date则不是其中。

这个错误: 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 将为零
  • 和哈希将应用于关键字参数,ruby 将引发错误,因为没有 startDate 和 endDate 关键字参数

您需要做的是:

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

它没有按预期工作,因为 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, {})

这是一个 ruby 问题,auto-expanding 如果最后一个参数是散列。

两个解决方法:

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, {})