0

내 프로젝트에서 다형성 연관을 만들고 싶었으므로 레일스 가이드를 따라 가려고했지만 다음과 같은 결과가 나타났습니다. NameError: uninitialized constant DashboardAssignment::Assignable 오류가 발생했습니다.레일의 다형성 '초기화되지 않은 상수'오류

모델 :

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에서
class Dashboard < ActiveRecord::Base 
    has_one :building 
    has_many :dashboard_assignments 
    has_many :users, through: :dashboard_assignments, as: :assignable 
end 

마이그레이션 파일 내가 가진 :

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' ... 

암 I :

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

u = User.find(1) 이 나에게 오류를 제공 어디 DashboardAssignment.create(assignable: u)에 의해 새로운 DashboardAssignment을 만들려고

뭔가 잘못하고 있는거야? 당신은 through 관련 source 대신 as를 사용한다이 클래스의 것을 당신에게 assignables을 줄 수도 있지만

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

나는주의 것 4.2.6

+0

어떤 오류가 당신에게 말하고있는 것은이라고 아무 속성이나 관계가 없다는 것입니다 DashboardAssignment 클래스에서 할당 할 수 있습니다. 대시 보드 모델을 알려 주시기 바랍니다. –

+0

확인. 로, dashboard_assignments :을 통해, 사용자 : has_many : 나는 확신합니다 – Levvy

+0

추가 대시 보드 모델은, 당신의 문제는 존재합니다 :이 하나가 당신을 도울 수 있다고 생각 할당 – 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

이 줄을 변경해 보았지만 같은 오류가 계속 발생했습니다. 내 프로젝트는 오픈 소스입니다. polimorphic branch에 https://github.com/GRM-dev/IMP/tree/Polimorphic – Levvy

+0

아마 그게 내 실수 일거야. :) DashboardAssignment에서 나는 validates : assignable, presence : true, uniqueness : {: scope => : dashboard}' 내가 그것을 제거하고'as :'를'source :'로 변경했을 때 모든 것이 잘 동작하는 것 같습니다. 또한'source_type : "User"를 해당 행에 추가했습니다. – Levvy