NameError (неинициализированная константа EngageStudent :: Engagecourse) - PullRequest
0 голосов
/ 29 июня 2018

У меня есть две модели:

# app/models/engage_course.rb

class EngageCourse < ApplicationRecord

   has_many :engagestudents
end


#app/models/engage_student.rb

class EngageStudent < ApplicationRecord

   belongs_to :engagecourse
end

my schema.rb is:

    ActiveRecord::Schema.define(version: 2018_06_29_093333) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "engage_courses", force: :cascade do |t|
    t.string "topic"
    t.string "description"
    t.datetime "start_date"
    t.integer "seats"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "engage_students", force: :cascade do |t|
    t.string "name"
    t.string "email"
    t.string "phone"
    t.string "college"
    t.string "semester"
    t.string "status"
    t.bigint "engagecourse_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["engagecourse_id"], name: "index_engage_students_on_engagecourse_id"
  end

end

Итак, при создании записи для enagestudent из rails console получаю ошибку NameError (uninitialized constant EngageStudent::Engagecourse)

Я думаю, что модель не может правильно отображать другие модели. Я хочу создать engaestudent для engagecouse.

Пожалуйста, смотрите скриншот. enter image description here

1 Ответ

0 голосов
/ 29 июня 2018

По соглашению, rails будет пытаться искать класс Engagecourse, а не EngageCourse из-за того, как вы определили belongs_to. Вы можете передать class_name, чтобы сообщить, какой класс вы хотите использовать для этой ассоциации:

class EngageStudent < ApplicationRecord
  belongs_to :engagecourse, class_name: 'EngageCourse'
end

UPDATE

Существует другой способ сделать это, но для этого необходимо изменить схему вашей БД (с учетом соглашений rails). Сохраните названия моделей как есть и измените ассоциации на их подчеркнутые версии:

class EngageCourse < ApplicationRecord
  has_many :engage_students
end

class EngageStudent < ApplicationRecord
  belongs_to :engage_course
end

Изменение в БД: Вам придется переименовать столбец "engcourse_id" в таблице "eng_students" в "eng_course_id".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...