Ale*_*der 3 ruby ruby-on-rails elasticsearch activeadmin ruby-on-rails-4
你好我一直在使用Railcasts#306(http://railscasts.com/episodes/306-elasticsearch-part-1)在我的应用程序中使用Elastic Search 作为示例.
在安装Active Admin gem之前,一切正常.当我在我的商店#index页面传递查询时,我收到以下错误:
未定义的方法`每个'用于Ransack :: Search>:Ransack :: Search
任何想法为什么它使用Ransack宝石(不是弹性搜索)进行搜索?
以下是与搜索相关的代码片段:
Shop.rb:
class Shop < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
(...)
end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
商店/ 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 %>
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,谢谢!
您的问题是您在同一个模型中使用ElasticSearch和Ransack(它是ActiveAdmin的依赖项).
Ransack对此案件有保护.您可以使用search和在Ransack中搜索ransack,如果模型已经有search方法,则Ransack不要过度编写它们.
您需要确保在Ransack(ActiveAdmin)之前加载ElasticSearch,这应该可以解决您的问题,并且可以在添加ActiveAdmin之前使用您的代码.
@nicooga解决方案的问题是,它使用Ransack进行搜索而不是ElasticSearch.
编辑:这应该是最好的解决方案:
如果你使用轮胎:
Shop.tire.search
Run Code Online (Sandbox Code Playgroud)
(来源)
如果您使用elasticsearch-ruby或elasticsearch-rails:
Shop.__elasticsearch__.search
Run Code Online (Sandbox Code Playgroud)
(来源)
更新:ActiveAdmin现在在他的文档中有关于此问题的部分.