在使用Active Admin结合Elastic Search和Ransack时,Ransack的搜索方法中为何找不到定义的`each`方法?

2026-04-11 15:271阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计391个文字,预计阅读时间需要2分钟。

在使用Active Admin结合Elastic Search和Ransack时,Ransack的搜索方法中为何找不到定义的`each`方法?

您好,我一直在使用Railcast。

您好我一直在使用Railcast#306( railscasts.com/episodes/306-elasticsearch-part-1)在我的应用中使用弹性搜索作为示例.

在安装Active Admin gem之前,一切正常.当我在我的商店#index页面传递查询时,我收到以下错误:

Ransack的未定义方法`each’::搜索>:Ransack :: Search

任何想法为什么它使用Ransack宝石(不是弹性搜索)进行搜索?

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

Shop.rb:

class Shop < ActiveRecord::Base include Tire::Model::Search include Tire::Model::Callbacks (...) end

shops_controller.rb

def index if params[:query].present? @shops = Shop.search(params[:query], load:true) else @shops = Shop.all end respond_with(@shops) 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 %>

任何帮助将不胜感激,谢谢!

您的问题是您在同一个模型中使用ElasticSearch和Ransack(它是ActiveAdmin的依赖项).

Ransack对此案件有保护.您可以使用搜索和搜索在Ransack中搜索,如果模型已经有搜索方法,则Ransack不要过度编写它们.

您需要确保在Ransack(ActiveAdmin)之前加载ElasticSearch,这应该可以解决您的问题,并且可以在添加ActiveAdmin之前使用您的代码.

@nicooga解决方案的问题是,它使用Ransack进行搜索而不是ElasticSearch.

编辑:这应该是最好的解决方案:

如果你使用轮胎:

Shop.tire.search

(Source)

如果您使用elasticsearch-ruby或elasticsearch-rails:

在使用Active Admin结合Elastic Search和Ransack时,Ransack的搜索方法中为何找不到定义的`each`方法?

Shop.__elasticsearch__.search

(source)

更新:ActiveAdmin现在在他的docs中有一个关于这个问题的部分.

本文共计391个文字,预计阅读时间需要2分钟。

在使用Active Admin结合Elastic Search和Ransack时,Ransack的搜索方法中为何找不到定义的`each`方法?

您好,我一直在使用Railcast。

您好我一直在使用Railcast#306( railscasts.com/episodes/306-elasticsearch-part-1)在我的应用中使用弹性搜索作为示例.

在安装Active Admin gem之前,一切正常.当我在我的商店#index页面传递查询时,我收到以下错误:

Ransack的未定义方法`each’::搜索>:Ransack :: Search

任何想法为什么它使用Ransack宝石(不是弹性搜索)进行搜索?

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

Shop.rb:

class Shop < ActiveRecord::Base include Tire::Model::Search include Tire::Model::Callbacks (...) end

shops_controller.rb

def index if params[:query].present? @shops = Shop.search(params[:query], load:true) else @shops = Shop.all end respond_with(@shops) 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 %>

任何帮助将不胜感激,谢谢!

您的问题是您在同一个模型中使用ElasticSearch和Ransack(它是ActiveAdmin的依赖项).

Ransack对此案件有保护.您可以使用搜索和搜索在Ransack中搜索,如果模型已经有搜索方法,则Ransack不要过度编写它们.

您需要确保在Ransack(ActiveAdmin)之前加载ElasticSearch,这应该可以解决您的问题,并且可以在添加ActiveAdmin之前使用您的代码.

@nicooga解决方案的问题是,它使用Ransack进行搜索而不是ElasticSearch.

编辑:这应该是最好的解决方案:

如果你使用轮胎:

Shop.tire.search

(Source)

如果您使用elasticsearch-ruby或elasticsearch-rails:

在使用Active Admin结合Elastic Search和Ransack时,Ransack的搜索方法中为何找不到定义的`each`方法?

Shop.__elasticsearch__.search

(source)

更新:ActiveAdmin现在在他的docs中有一个关于这个问题的部分.