Rails Elasticsearch“[PROXY]的未定义方法`model_name'”

时间:2015-01-13 18:32:46

标签: ruby-on-rails ruby-on-rails-3 activerecord elasticsearch

我有一个rails应用程序,我希望全文搜索到我的弹性搜索服务器。我运行的Elasticsearch服务器没有问题,我可以使用curl对其进行全文搜索。

但是,我遇到'elasticsearch-model''elasticsearch-rails'的问题。用我的模型:

require 'elasticsearch/model'

class ConfigTextSearch 
  include Elasticsearch::Model
end

ConfigTextSearch.import

我明白了:

NoMethodError (undefined method `model_name' for [PROXY] ConfigTextSearch:Elasticsearch::Model::Proxy::ClassMethodsProxy):
  app/models/config_text_search.rb:7:in `<top (required)>'
  app/controllers/devices_controller.rb:73:in `config_text_search'
  app/metal/status.rb:18:in `call'

当我通过应用程序进行查询时,或者如果我进入rails控制台并尝试inspect(ConfigTextSearch)

我尝试在我的模型中使用class ConfigTextSearch < ActiveRecord::Base ...想想也许遗留的方法可以继承,但后来我得到NameError: uninitialized constant ActiveRecord

有关如何解决弹性搜索轨道插件的undefined method 'model_name'的任何想法?

更新:这是控制器以及我如何进行搜索:

  def config_text_search
    if params[:device_id].nil?
      @devices_with_config = []
    else
       @devices_with_config = ConfigTextSearch.search params[:device_id])
    end
  end

1 个答案:

答案 0 :(得分:3)

elasticsearch-model gem需要看起来像ActiveRecord对象的东西,并对其包含的对象做出很多假设。

您可以沿着使用ActiveModel的路径在您正在使用的对象中包含必要的功能,但我不确定您是否按照预期的方式使用它。

通常你有一个继承自ActiveRecord :: Base的模型,比如一个User。 elasticsearch-model gem使可搜索的假设大量关于底层对象。

ConfigTextSearch听起来并不像你正在搜索的东西 - 你可能有一个你正在搜索的配置。如果是这种情况,您可以在Config中包含弹性搜索模型,然后您可以进行Config.search(&#39;无论您想搜索什么&#39;)