我正在使用Elasticsearch-Model
. 我将所有与搜索相关的方法提取到一个ActiveSupport::Concern
. 以下代码是在使用 Tire gem 时编写的,但我将 gem 升级到 Elasticsearch-Rails 和 Elasticsearch-Model,因为 Tire 不支持 Elasticsearch 1.x。当前的实现如下所示:
require 'active_support/concern'
module SearchBooks
extend ActiveSupport::Concern
included do
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
mapping do
locales = %w['de', 'en', 'fr']
locales.each do |locale|
class_eval <<-RUBY
indexes: ...
RUBY
end
end
end
但我收到了这个错误:
/Users/xxx/.rvm/gems/ruby-2.0.0-p647/gems/activesupport-3.2.22/lib/active_support/core_ext/kernel/singleton_class.rb:11:in `class_eval': undefined method `indexes' for #<Class:0x007fea661037ec> (NoMethodError)
我尝试了很多东西,例如 usinddef included(base)
和 then base.eval
,但我无法进入class_eval
正确的范围。
有任何想法吗?