ActiveRecord :: HasManyThroughAssociationNotFoundError - Ruby on Rails

时间:2017-01-28 01:13:30

标签: ruby-on-rails ruby activerecord

我正在研究STMS。我正试图模拟出来并试图通过以下方式为学生表添加新记录:

stud = Student.create(:student_id => 1, :first_name => 'Jos', :last_name => 'Norton', :email => 'ss.norton@gmail.com', :birthday => '12/05/1995', :subjects => 'English', :username => 'samnorton05', :password => 'Grace02112')

我收到了一个错误:

ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the association :enrolled_subjects in model Student 

这是我正在使用的模型:

class Student < ApplicationRecord

  has_many :subjects, through: :enrolled_subjects
  has_many :teachers, through: :enrolled_subjects

  def teacher_names
    self.teachers.map(&:name).join(", ")
  end

  has_many :admin_users
  has_secure_password
  self.primary_key = :student_id


  scope :newest_first, lambda { order("created_at ASC") }
  scope :oldest_first, lambda { order("created_at DESC") }
  # scope :search, lambda { |query| where(["name LIKE ?", "%#{query}%"])}

end

class Teacher < ApplicationRecord

  has_many :subjects, through: :enrolled_subjects
  has_many :students, through: :enrolled_subjects
  has_many :admin_users
  has_secure_password

  scope :newest_first, lambda { order("created_at ASC") }
  scope :oldest_first, lambda { order("created_at DESC") }
  # scope :search, lambda { |query| where(["name LIKE ?", "%#{query}%"])}
end

class Subject < ApplicationRecord

  has_many :students, through: :enrolled_subjects
  has_many :teachers, through: :enrolled_subjects
  has_many :admin_users

  # scope :search, lambda { |query| where(["name LIKE ?", "%#{query}%"])}

end

class EnrolledSubject < ApplicationRecord
  belongs_to :student
  belongs_to :subject
  belongs_to :teacher
end

class AdminUser < ApplicationRecord

  has_secure_password

  scope :newest_first, lambda { order("created_at ASC") }
  scope :oldest_first, lambda { order("created_at DESC") }
  # scope :search, lambda { |query| where(["name LIKE ?", "%#{query}%"])}
end

基本上我有5个表:学生,教师,科目,管理员用户和注册科目。知道我做错了什么吗?对不起,我是新手。

编辑这里是我的移民:

 create_table :students, :id => false do |t|
    t.integer "student_id", :auto_increment => true, :primary_key => true
    t.string "first_name", :limit => 25
    t.string "last_name", :limit => 50
    t.string "email", :default => ' ', :null => false
    t.string "birthday"
    t.string "subjects"
    t.string "username", :limit => 25
    t.string "password_digest"
    t.timestamps
  end

  create_table :teachers, :id => false do |t|
      t.integer "teacher_id", :auto_increment => true, :primary_key => true
      t.string "first_name"
      t.string "last_name"
      t.string "email", :default => ' ', :null => false
      t.string "birthday"
      t.string "subjects"
      t.string "username", :limit => 25
      t.string "password_digest"
      t.timestamps
    end

1 个答案:

答案 0 :(得分:1)

您还应该添加enrolled_subjects,例如:

class Student < ApplicationRecord
  # first you add the association to enrolled_subjects
  has_many :enrolled_subjects
  # then you add the associations you has through it
  has_many :subjects, through: :enrolled_subjects
  has_many :teachers, through: :enrolled_subjects

end