Ruby on rails 未定义的方法'each';对于Ransack::使用活动管理和弹性搜索时进行搜索?
你好,我一直在我的应用程序中使用弹性搜索,以Railcast#306()为例 在我安装活动管理gem之前,一切都很正常。当我在我的店铺索引页面中传递查询时,我会遇到以下错误: 未定义的Ransack::Search>方法“each”:Ransack::Search 你知道为什么它要用搜救宝石(不是弹性搜索)来搜索吗 以下是与搜索相关的代码片段: Shop.rb:Ruby on rails 未定义的方法'each';对于Ransack::使用活动管理和弹性搜索时进行搜索?,ruby-on-rails,ruby,ruby-on-rails-4,
elasticsearch,activeadmin,Ruby On Rails,Ruby,Ruby On Rails 4,
elasticsearch,Activeadmin,你好,我一直在我的应用程序中使用弹性搜索,以Railcast#306()为例 在我安装活动管理gem之前,一切都很正常。当我在我的店铺索引页面中传递查询时,我会遇到以下错误: 未定义的Ransack::Search>方法“each”:Ransack::Search 你知道为什么它要用搜救宝石(不是弹性搜索)来搜索吗 以下是与搜索相关的代码片段: Shop.rb: class Shop < ActiveRecord::Base include Tire::Model::Search
class Shop < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
(...)
end
商店/index.html.erb
<%=form_tag shops_path, :method =>:get do %>
<p><%= text_field_tag :query, params[:query] %>
<%= submit_tag "Search", :name => nil, class: "button small success" %></p>
<% end %>
:get do%>
零,类:“按钮小成功”%>
任何帮助都将不胜感激,谢谢 当您使用ransack时
Shop.search(params[:query])
返回一个Ransack::Search
对象,因此Ransack::Search的“undefined methodeach”错误。
换成
@shops = Shop.search(params[:query], load:true).result
您的问题是在同一个模型中使用ElasticSearch和Ransack(这是ActiveAdmin的一个依赖项)
Ransack对这个案子有保护作用。您可以使用search
和Ransack
在Ransack中搜索,如果模型已经有search
方法,请不要重写它们
您需要确保在Ransack(ActiveAdmin)之前加载ElasticSearch,这将解决您的问题,并且您可以像添加ActiveAdmin之前一样使用代码
@nicooga解决方案的问题是,它使用的是Ransack搜索,而不是ElasticSearch
编辑:这应该是最好的解决方案:
如果使用轮胎:
Shop.tire.search
()
如果使用elasticsearch ruby或elasticsearch rails:
Shop.__elasticsearch__.search
()
更新:ActiveAdmin现在有一个关于这个问题的部分。成功了!谢谢:)。这并不能解决问题,它仍然使用Ransack进行搜索,而不是ElasticSearch。错误是“未定义的方法‘each’for Ransack::search”,但问题是:“知道为什么它使用Ransack gem(非Elastic search)进行搜索吗?”。你解决了错误,但没有回答问题。这并不意味着你都是对的@Alexander你应该把另一个答案标记为已接受,这样我就可以删除这个。我想这应该是已接受的答案,太多了
Shop.__elasticsearch__.search