Я хочу использовать join_table между двумя отношениями многие ко многим.
ученик -> join_table <- учитель </strong>
Определение модели:
class Student < ApplicationRecord
has_and_belongs_to_many :teachers, join_table: map_student_teacher
end
class Teacher < ApplicationRecord
has_and_belongs_to_many :students, join_table: map_student_teacher
end
Определение миграции:
class CreateStudents < ActiveRecord::Migration[6.0]
def change
create_table :students do |t|
t.string : student_name
end
end
end
class CreateTeachers < ActiveRecord::Migration[6.0]
def change
create_table :teachers do |t|
t.string : teacher_name
end
end
end
class CreateStudentsTeachersJoinTable < ActiveRecord::Migration[6.0]
def change
create_table :map_student_teacher, id: false do |t|
t.belongs_to :student, index: true
t.belongs_to :teacher, index: true
end
end
end
Сейчас У меня есть файл seed.rb для инициализации имен учеников.
students_defaults = ["hans","otto","paul","elsa"]
students_defaults.each do |name|
Student.create(student_name: name)
end
Когда я загружаю семя по rails db:seed
, я получаю это сообщение об ошибке:
rails aborted!
NameError: undefined local variable or method `map_student_teacher' for Student (call 'Student.connection' to establish a connection):Class
/home/sven/.rvm/gems/ruby-2.5.3/gems/activerecord-6.0.2.2/lib/active_record/dynamic_matchers.rb:22:in `method_missing'
Что происходит не так?