【问题标题】:Searchkick search method argument error after ruby upgrade to 3.0.0ruby 升级到 3.0.0 后 Searchkick 搜索方法参数错误
【发布时间】:2021-03-23 02:32:15
【问题描述】:

将 ruby​​ 版本从 2.7.2 更新到 3.0.0,默认 Searchkick 搜索行为停止工作。

错误跟踪:

ArgumentError in ProductsAvailabilitiesController#index

wrong number of arguments (given 2, expected 0..1)

searchkick (4.4.4) lib/searchkick/model.rb:43:in `searchkick_search'
...

这是在 ruby​​ 2.7.2 上运行良好的简单搜索方法:

def search_method(query, page)
  search_options = {
    fields: [:name, :address, :comment],
    match: :word_middle,
    page: page,
    per_page: 10
  }

  search(query, search_options)
end

这是我的 Gemfile.lock:

searchkick (4.4.4)
  activemodel (>= 5)
  elasticsearch (>= 6)
  hashie
elasticsearch (7.11.2)
  elasticsearch-api (= 7.11.2)
  elasticsearch-transport (= 7.11.2)
elasticsearch-api (7.11.2)
  multi_json
elasticsearch-transport (7.11.2)
  faraday (~> 1)
  multi_json

有没有办法解决这个问题或者它是 gem 源中的错误?

【问题讨论】:

    标签: ruby-on-rails elasticsearch searchkick ruby-3


    【解决方案1】:

    在 ruby​​ 3.0.0 更新日志中,您会发现以下更新:

    Changes in separation of positional and keyword arguments

    正如您在错误跟踪中看到的,问题出在方法 searchkick_search 中。 让我们在 searchkick gem 资源中检查它的implementation。它包含参数**options

     def searchkick_search(term = "*", **options, &block)
    

    在 ruby​​ 2.7.2 中,哈希值会自动转换为关键字参数。 在 ruby​​ 3.0.0 中没有。 如果您想保持这种行为 - 在搜索方法参数中添加“**”。

    只需更改您的来源:

     search(query, search_options_hash)
    

    到这里:

     search(query, **search_options_hash)
    

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 1970-01-01
      • 2016-02-20
      • 2021-06-08
      • 2021-09-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多