2017-01-28 67 views
1

私はSTMSに取り組んでいます。経由して物事をモデル化し、学生のテーブルの新しいレコードを追加しようとしようとしていますが:ActiveRecord :: HasManyThroughAssociationNotFoundError - Ruby on Rails

stud = Student.create(:student_id => 1, :first_name => 'Jos', :last_name => 'Norton', :email => '[email protected]', :birthday => '12/05/1995', :subjects => 'English', :username => 'samnorton05', :password => 'Grace02112') 

私はエラーを得た:

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 
を:

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

は、ここで私が使用していたモデルです

基本的に私は5つのテーブルを持っています:学生、教師、科目、管理者のユーザーと登録科目。どのようなアイデアを私は間違って何ですか?申し訳ありません、私はここで初心者です。 HERE

EDITはMYマイグレーションされています

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

あなたが好きなだけでなく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 
+0

私も同様の先生にそれを配置する必要がありますでしょうか? –

+0

私は試してみました** NoMethodError:未定義のメソッド "each" for "English":String ** –

+0

yeap!それらのすべては、モデルはまずモデルとのhas_many関係を持っていることを知る必要があります。次に、それを介して別の関連付けを作成できるようになります。 –