Рельсы 5 Миграционный Вопрос Типа Данных
Я изначально разрабатывал свое приложение rails 5, используя PostgreSQL. Мне пришлось перейти на MariaDB после того, как я сделал всю свою разработку из-за некоторых проблем с хостингом.
Я пытаюсь ввести обновление, которое добавляет ссылку на администратора из моей корзины покупок. Вот моя миграция:
class AddAdminRefToCart < ActiveRecord::Migration[5.1]
def change
add_reference :carts, :admin, foreign_key: true
end
end
Когда я бегу
rake db:migrate
Я получаю эту ошибку:
== 20171129152942 AddAdminRefToCart: migrating ================================
-- add_reference(:carts, :admin, {:foreign_key=>true})
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Column `admin_id` on table `carts` has a type of `bigint(20)`.
This does not match column `id` on `admins`, which has type `int(11)`.
To resolve this issue, change the type of the `admin_id` column on `carts` to be :integer. (For example `t.integer admin_id`).
Ошибка имеет смысл, но я не уверен в правильном способе устранения проблемы. Может кто-нибудь, пожалуйста, дать некоторые указания о том, как я должен писать свою миграцию? Заранее спасибо!
1 ответ:
Вы можете просто указать точный тип данных, который вы хотите, вместо того, чтобы использовать
add_reference
.add_column :carts, :admin_id, :integer, limit: 4 add_foreign_key :carts, :admins
Параметр
limit: 4
указывает базе данных создать 4-байтовое поле, которое будет соответствовать INT, в отличие отlimit: 8
(по-видимому, теперь по умолчанию), которое будет соответствовать BIGINT.Как я уже упоминал в комментариях, это не создаст никаких проблем, не используя
add_reference
, так какadd_reference
- это просто "синтаксический сахар" дляadd_column
и, необязательно,add_index
иadd_foreign_key
.