2017-05-15 8 views
0

내 모델 Student와 Teacher가 동일한 Devise 모델 User로부터 상속받을 수 있도록 단일 테이블 상속을 사용합니다 (속성은 동일하며 다른 모델과의 관계 만 있습니다. 다른).Rails DevTI STI - 정의되지 않은 로컬 변수 또는 메소드 <QuizSession>

이제 Teacher와 일대일 관계가 있고 학생과 일대일 관계가있는 QuizSession 모델의 인스턴스에서 데이터를 표시하려고 시도했지만 오류가 계속 발생합니다 : undefined local variable or method 'users' for #<QuizSession:0xb48e740>. 여기

내 모델입니다 :

# app/models/user.rb: 
class User < ApplicationRecord 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
    belongs_to :quiz_session, optional: true 

    # Which users subclass the User model 
    def self.types 
    %w(Teacher Student) 
    end 

    # Add scopes to the parent models for each child model 
    scope :teachers, -> { where(type: 'Teacher') } 
    scope :students, -> { where(type: 'Student') } 
end 

# app/models/teacher.rb: 
class Teacher < User 
end 

# app/models/student.rb: 
class Student < User 
end 

# app/models/quiz_session.rb: 
class QuizSession < ApplicationRecord 
    belongs_to :quiz 
    has_one :teacher 
    has_many :students 

    delegate :teachers, :students, to: :users #<-- this is apparently where the error occurs 
end 

편집 : 나는 @quiz_session.students를 호출 할 때 문제가 발생하는 것 같습니다. 올바른 QuizSession 레코드가 발견되는 동안 명백하게 .students를 해결할 수 없습니까? 왜 사용자 모델은 학생 모델이 상속해야하는 quiz_session_id 속성을 가지고 있기 때문에 나는 이해하지 못합니다.

+0

''': users'''를''': user'''로 변경하십시오. – hashrocket

+0

고마워요! 나는 그것을 '대리인 : 교사, 학생, to : : 사용자'로 변경했으며 이제는 효과가있는 것처럼 보입니다! 당신이 대답으로 그것을 쓰면 @hashrocket 나는 그것을 받아 들일거야! :) – megahra

답변

1

변경이 줄이로

delegate :teachers, :students, to: :users 

: 모델은 사용자가 아닌 사용자 때문에이 변화에 대한

delegate :teachers, :students, to: :user 

이유입니다.

+0

고마워요! 그것은 대표자 여야 만했다 : 선생님, : 학생, : : 사용자.) – megahra