2017-05-15 2 views
0

私のモデルStudentとTeacherが同じDeviseモデルUserから継承するように、単一のテーブル継承を使用しています(属性は同じです。異なる)。Rails Devits STI - 定義されていないローカル変数またはメソッド<QuizSession>

教師と1対1の関係を持ち、Studentとの関係が1対1のモデル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 

EDIT:問題は、私は@quiz_session.studentsを呼び出すしようとしたときに発生するようです。正しいQuizSessionレコードが見つかっている間は、明らかに.studentsを解決できませんか?私は理由を理解できません。ユーザーモデルには、学生モデルが継承する属性quiz_session_idがあるためです。

+0

'':users'''を '' ':user'''に変更してみてください。 – hashrocket

+0

ありがとうございます!私はそれを 'delegate:teacher、:student、::user'に変更しました。 @ハッシュロケットあなたが答えとしてそれを書くなら、私はそれを受け入れるでしょう! :) – megahra

答えて

1

変更この行:これに

delegate :teachers, :students, to: :users 

:あなたのモデルは、ユーザーではなく、ユーザーであるため、この変更の

delegate :teachers, :students, to: :user 

理由があります。

+0

ありがとう!それは「代議員:教師、学生、生徒::ユーザーのことだ」) – megahra

関連する問題