2016-08-02 2 views
0

レールでSinge Table継承を使用しています。しかし、コマンドを実行する上で、細かいランニングレールでSTI内でenumを使用するとmongo load_modelsエラーが発生する

module ModuleName 
    class ParentClass < ActiveRecord::Base 
    enum status: {OPEN: 'open', CLOSED: 'closed'} 
    end 
end 

module ModuleName 
    class ChildClass1 < ParentClass 
    end 
end 

module ModuleName 
    class ChildClass2 < ParentClass 
    end 
end 

移行し、ローカルホストサーバーを: -

bundle exec rake db:mongoid:remove_indexes 

か私はエラーを取得しています

bundle exec rake db:mongoid:create_indexes 

ArgumentError: You tried to define an enum named "status" on the model "ModuleName::ParentClass", but this will generate a instance method "status=", which is already defined by another enum. 
Tasks: TOP => db:mongoid:remove_indexes => db:mongoid:load_models 

ヒットとトライアルとして、ステータス列挙を親クラスから削除して子クラスに別々に入れてみました。動作しませんでした。

インターネットで関連するヘルプが見つかりませんでした。 何か助けや提案がありがとうございます。おかげさまで

答えて

0

修正済みです。

モデルがeagerloadされると問題が発生します。 db:mongoid:load_modelsはそれを行います。あなたは

ソリューションは、回避策の詳細ですあなたのconfigファイルで

config.eager_load = true 

を持っている場合、移行とレールサーバがあまりにも失敗します。 enumを次のように宣言して動作します。 -

enum status: {OPEN: 'open', CLOSED: 'closed'} unless instance_methods.include? :status 
関連する問題