ActiveRecord::Base を拡張しています。私の lib フォルダーには、ファイル mongoid_bridge.rb があります。
module MongoidBridge
extend ActiveSupport::Concern
module ClassMethods
...
end
module InstanceMethods
...
def create_mongo(klass, fields)
...
end
end
end
ActiveRecord::Base.send(:include, MongoidBridge)
config/initializers には 2 つのファイルがあり、正しい順序で読み取られるように、それぞれに 01、02 などのプレフィックスが付けられています。01_mongo_mixer.rb には次のように記述されています。
require "active_record_bridge"
require "mongoid_bridge"
次に、02_model_initializer.rb には次のように記述されています。
MyActiveRecordModel.all.each do |model|
model.create_mongo(some_klass, some_fields)
end
model は ActiveRecord サブクラスのインスタンスであるため、ルックアップ チェーンで create_mongo インスタンス メソッドを見つける必要があります。ただし、次のエラーが発生するため、見つかりません。
Uncaught exception: undefined method `create_mongo' for #<MyActiveRecordModel:0x007fff1f5e5e18>
インスタンスメソッドが見つからないのはなぜですか?
アップデート:
ClassMethods の下のメソッドは含まれているようですが、InstanceMethods の下のメソッドは含まれていません。
singleton_respond = MyActiveRecordModel.respond_to? :has_many_documents
# => true
instance_respond = MyActiveRecordModel.new.respond_to? :create_mongo
# => false