Рельсы 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 3

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.