将ruby版本从2.7.2更新到3.0.0,默认搜索行为停止工作。
错误跟踪:
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有没有解决这个问题的方法,还是宝石源中的一个bug?
发布于 2021-03-23 02:41:28
在ruby 3.0.0 changelog中,您将看到以下内容的更新:
正如您在错误跟踪中所看到的,问题在于方法searchkick_search。让我们检查一下,它是实现在搜索宝石源。它包含参数**options
def searchkick_search(term = "*", **options, &block)在ruby2.7.2中,散列自动转换为关键字参数。红宝石3.0.0没有。如果您想保持这种行为--在搜索方法参数中添加"**“。
只需在您的源中更改如下:
search(query, search_options_hash)对此:
search(query, **search_options_hash)https://stackoverflow.com/questions/66756464
复制相似问题