Как добавить миграцию ссылочных столбцов в Rails 6 с SQLite - PullRequest
2 голосов
/ 05 февраля 2020

Как правильно добавить миграцию столбцов ссылок в Rails 6, не получая SQLite3::SQLException: Cannot add a NOT NULL column with default value NULL?

Я могу взломать его, чтобы он заработал; но я готовлю учебник для выпускного класса, поэтому хочу убедиться, что я делаю это «по книге».

Отправной точкой является Post класс (подумайте «пост в блоге») ). Я хочу добавить класс Author и установить отношение «один ко многим» между авторами и публикациями. После добавления класса author и запуска соответствующей миграции я создаю миграцию, чтобы добавить ссылку Author на Post:

rails g migration AddAuthorToPost author:references

Эта команда создает:

class AddAuthorToPost < ActiveRecord::Migration[6.0]
  def change
    add_reference :posts, :author, null: false, foreign_key: true
  end
end

Проблема, конечно, в том, что SQLite жалуется, потому что не допускает возможности использования внешнего ключа null - даже если таблица Post пуста: ( Как решить «Не удается добавить столбец NOT NULL со значением по умолчанию NULL» в SQLite3? )

Я оглянулся на учебник предыдущего года (подготовленный другим инструктором), а генератор не добавил null: false до миграции. (См. Также Добавление ссылочной миграции столбцов в Rails 5 )

Удаление null: false из миграции позволяет запустить миграцию; но «отключение функций безопасности» не представляется целесообразным в классе:)

Есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 05 февраля 2020

По умолчанию требуется иностранный ключ (на уровне приложения, а не в базе данных).

Чтобы отключить, в config / application.rb добавьте

config.active_record.belongs_to_required_by_default = false

или

class YourModel < ApplicationRecord
  belongs_to :another_model, optional: true
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...