ActiveRecord :: StatementInvalid: SQLite3 :: SQLException: такой таблицы нет - PullRequest
0 голосов
/ 07 марта 2020

Я новичок в Rails и пытаюсь создать простое веб-приложение.

Я сгенерировал следующие компоненты:

rails generate scaffold user username:string password:string
rails generate scaffold appointment doctor:references patient:references

и в модели назначения я указал класс для доктора и пациента, чтобы быть пользователями, как показано ниже

# app/models/appointment.rb
class Appointment < ApplicationRecord
  belongs_to :doctor, :class_name => "User"
  belongs_to :patient, :class_name => "User"
end

Я оставил все остальное таким же, применяя rails db:migrate и rake db:test:prepare, я получил это сообщение об ошибке, говоря, что у меня нет table doctor

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: main.doctors

Но я думал, что спецификация в assign.rb поможет мне.

Как мне сделать эту работу?

Ответы [ 2 ]

1 голос
/ 08 марта 2020

doctor: references и patient: references создадут два столбца в таблице appointments с doctor_id и patient_id, которые будут ссылаться на таблицы doctors и patients соответственно.

Не удивительно здесь эти таблицы не существуют. Чтобы сообщить миграции, что doctor и patient на самом деле из таблицы users, вам необходимо использовать to_table в своей миграции:

Откройте файл миграции встреч в db/migrate/ и добавьте to_table опция для ссылок на пациентов и врачей:

t.references :doctor, foreign_key: { to_table: :users }, index: true
t.references :patient, foreign_key: { to_tabale: :users }, index: true

to_table используется, если вы хотите сделать ссылку на столбец другой таблицей.

1 голос
/ 08 марта 2020

Скаффолд, скорее всего, сгенерировал миграцию с foreign_key: true в ссылках.

Проверьте файл миграции create_appointments в db/migrate/ и удалите его.

Если вы хотите иметь чужой добавление ключа:

add_foreign_key :appointments, :users, column: :doctor_id
add_foreign_key :appointments, :users, column: :patient_id

https://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_foreign_key

Ограничение внешнего ключа проверяет, присутствует ли заданный вами идентификатор в другой таблице. Если это не так, он создаст sh при создании записи.

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