elasticsearch,activeadmin,Ruby On Rails,Ruby,Ruby On Rails 4,elasticsearch,Activeadmin" /> elasticsearch,activeadmin,Ruby On Rails,Ruby,Ruby On Rails 4,elasticsearch,Activeadmin" />

Ruby on rails 未定义的方法'each';对于Ransack::使用活动管理和弹性搜索时进行搜索?

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

你好,我一直在我的应用程序中使用弹性搜索,以Railcast#306()为例

在我安装活动管理gem之前,一切都很正常。当我在我的店铺索引页面中传递查询时,我会遇到以下错误:

未定义的Ransack::Search>方法“each”:Ransack::Search

你知道为什么它要用搜救宝石(不是弹性搜索)来搜索吗

以下是与搜索相关的代码片段:

Shop.rb:

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 method
each”错误。
换成

@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