私のモデル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
があるためです。
'':users'''を '' ':user'''に変更してみてください。 – hashrocket
ありがとうございます!私はそれを 'delegate:teacher、:student、::user'に変更しました。 @ハッシュロケットあなたが答えとしてそれを書くなら、私はそれを受け入れるでしょう! :) – megahra