0

を使用してかなり複雑なマッピングを生成していElasticsearch-Modelます。検索関連のすべてのメソッドを に抽出しましたActiveSupport::Concern。次のコードは Tire gem を使用して記述したものですが、Tire は Elasticsearch 1.x をサポートしていないため、gem を Elasticsearch-Rails および Elasticsearch-Model にアップグレードしています。現在の実装は次のようになります。

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

何か案は?

4

1 に答える 1

0

解決策は非常に単純であることが判明しました。

instance_evalの代わりに使用するだけです。class_evalマッピング ブロックは内部のすべてを のインスタンスにスコープするためですElasticsearch::Model::Indexing::Mappings

于 2016-01-12T11:40:59.720 に答える