2016-12-22 3 views
0

Я создал файл миграции со следующим контентом. Он отлично работает с SQLite, но когда я переключаюсь на MySQL, я получаю сообщение« Can not create table "(см. ниже).Два внешних ключа повышают «Может» создать таблицу »на MySQL AUTO_INCREMENT PRIMARY KEY

class CreateVisits < ActiveRecord::Migration[5.0] 
    def change 
    create_table :visits, :primary_key => :id do |t| 
     t.references :user, foreign_key: true 
     t.references :visitor, foreign_key: "User" 
     t.timestamps 
    end 
    add_index :visits, [:user_id, :visitor_id], unique: true 
    end 
end 

MySQL выдает ошибку:

Mysql2::Error: Can't create table 'myapp_development.visits' (errno: 150): 
CREATE TABLE `visits` (
`id` int AUTO_INCREMENT PRIMARY KEY, 
`user_id` int, 
`visitor_id` int, 
`created_at` datetime NOT NULL, 
`updated_at` datetime NOT NULL, 
INDEX `index_visits_on_user_id` (`user_id`), 
INDEX `index_visits_on_visitor_id` (`visitor_id`), 
CONSTRAINT `fk_rails_09e5e7c20b` 
FOREIGN KEY (`user_id`) 
    REFERENCES `users` (`id`), 
CONSTRAINT `fk_rails_b156c396f4` 
FOREIGN KEY (`visitor_id`) 
    REFERENCES `visitors` (`id`) 
) 

ENGINE=InnoDB 

Идеи приветствуются!

+0

У вас есть таблица 'users' и таблица' users', созданная до создания этой таблицы 'посещений'? –

+0

таблица пользователей была создана ранее. Таблица посещений содержит 2 столбца: user_id и visitor_id, которые оба связаны с 1 записью в таблице пользователей –

+0

, как насчет таблицы 'visitors'? это похоже на то, что mysql пытается создать ссылку, но не смог найти одну из таблиц, которую он пытается ссылаться на –

ответ

1

150 Ошибка обычно возникает при попытке ссылаться на таблицу, которая не существует.

В вашем случае вы указываете оба внешних ключа на один и тот же первичный ключ в таблице users.

Но в этом случае вы не можете просто использовать foreign_key: true. Но вы можете сделать это, добавив еще две строки.

def change 
    create_table :visits, :primary_key => :id do |t| 
    t.references :user, references: :visits 
    t.references :visitor, references: :visits 
    t.timestamps 
    end 

    add_foreign_key :visits, :users, column: :user_id 
    add_foreign_key :visits, :users, column: :visitor_id 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^