0

私は多面的な関連付けをプロジェクトで行っていましたので、私はそれを行うためのガイドをフォローしましたが、私には:NameError: uninitialized constant DashboardAssignment::Assignable エラーがあります。Railsの「初期化されていない定数」エラーの多態性

モデル:

DashboardAssignment:

class DashboardAssignment < ActiveRecord::Base 
    belongs_to :dashboard 
    belongs_to :assignable, polymorphic: true 

    validates :dashboard, presence: true 
    validates :assignable, presence: true, uniqueness: { :scope => :dashboard } 
end 

ユーザー:

class User < ActiveRecord::Base 
    has_many :dashboard_assignments, as: :assignable 
    has_many :dashboards, through: :dashboard_assignments 
end 

グループ:

class Group < ActiveRecord::Base 
    has_one :dashboard_assignment, as: :assignable 
    has_many :laboratories_assignments, as: :lab_assignable 
end 

ダッシュボード私はDashboardAssignment.create(assignable: u)u = User.find(1) によって新しいDashboardAssignmentを作成しようとすると

t.references :assignable, null: false, polymorphic: true, index: true 

それは私にエラーを与える:

NameError: uninitialized constant DashboardAssignment::Assignable 
    from P:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-4.2.6/lib/active_record/inheritance.rb:158:in `compute_type' ... 

は、私は:私が持っているDashboardAssignment 移行ファイルで

class Dashboard < ActiveRecord::Base 
    has_one :building 
    has_many :dashboard_assignments 
    has_many :users, through: :dashboard_assignments, as: :assignable 
end 

何か間違っている?

マイレールのバージョンは、私はこれがあなたのクラスであるassignablesを与えるかもしれないというかかわらず注意を促してしまうあなたがthrough関連

class Dashboard < ActiveRecord::Base 
    has_one :building 
    has_many :dashboard_assignments 
    has_many :users, through: :dashboard_assignments, source: :assignable 
end 

に代わりassourceを使用する必要があります4.2.6

+0

どのようなエラーがあなたを語っていることと呼ばれる無属性や関連がないことですDashboardAssignmentクラスで代入可能です。ダッシュボードモデルを投稿してください。 –

+0

ok。 dashboard_assignments:を通じて、ユーザー: has_manyの:私はかなり確信しています – Levvy

+0

追加ダッシュボードモデルは、あなたの問題は存在しているの:私はこの1つはあなたを助けることができると思いアサイナブル – bpieck

答えて

1

ですGroup。この問題の回避に行くための最善の方法は、あなたが唯一持っているdashboard_assignmentsのためにフィルタできdashboard_assignmentsためhas_manyに条件を追加することですassignable_type = 'User'

class Dashboard < ActiveRecord::Base 
    has_one :building 
    has_many :user_dashboard_assignments, -> { where(assignable_type: 'User') }, class_name: 'DashboardAssignment' 
    has_many :users, through: :user_dashboard_assignments, source: :assignable 
end 
+0

これらの行を変更しようとしましたが、同じエラーが発生します。私のプロジェクトはオープンソースです:https://github.com/GRM-dev/IMP/tree/ polimorphicブランチのPolimorphic – Levvy

+0

ああ、それはおそらく私の間違いでした:) DashboardAssignmentでは、私は 'validates:assignable、presence:真:一意性:{:scope =>:ダッシュボード} ' 私はそれを削除し、' as: 'を' source: 'に変更しました。 'source_type:" User "をその行に追加しました。 – Levvy

関連する問題