Rails db переносит ошибку - PullRequest
0 голосов
/ 16 мая 2018

Я начал писать API в рельсах. Я хочу перенести мою модель в БД, но получаю эту ошибку:

E:\WebAuction\Backend\api>rails db:migrate
rails db:migrate
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

you can't redefine the primary key column 'id'. To define a custom primary key, pass { id: false } to create_table.
E:/WebAuction/Backend/api/db/migrate/20180516070242_create_wa_players.rb:4:in `block in change'
E:/WebAuction/Backend/api/db/migrate/20180516070242_create_wa_players.rb:3:in `change'
bin/rails:4:in `<main>'

Caused by:
ArgumentError: you can't redefine the primary key column 'id'. To define a custom primary key, pass { id: false } to create_table.
E:/WebAuction/Backend/api/db/migrate/20180516070242_create_wa_players.rb:4:in `block in change'
E:/WebAuction/Backend/api/db/migrate/20180516070242_create_wa_players.rb:3:in `change'
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
== 20180516070242 CreateWaPlayers: migrating ==================================
-- create_table(:wa_players)

Моя модель класса

class WaPlayer < ApplicationRecord::Base
  has_secure_password

  def change
    create_table :wa_players, :id => false do |t|
      t.id :String
      t.playerName :String
      t.uuid :String
      t.password :String
      t.money :String
      t.itemsSold :String
      t.itemsBought :String
      t.earnt :String
      t.spent :String
      t.Permissions :String
      t.Locked :String
      t.timestamps null: false
    end
    add_index :wa_players, :id
  end
end

Если кто-то знает, как исправить, скажите, пожалуйста, как.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Не знаю, откуда вы получаете свои активные записи, но, похоже, вы все испортили. Это не t.<column> <type>. Это t.<type> <column>.

t.string :id
t.string :player_name

и т. Д.

(Примечание: большинство имен в ruby ​​следует соглашению об именах snake_case, а не camelCase).

0 голосов
/ 16 мая 2018

Из предоставленного контента кажется, что вы движетесь не в ту сторону:

Во-первых, генерация миграции для модели, которая, по-видимому, вы сделали так же, как вы поделились с классом модели.

Модель класса

class WaPlayer < ApplicationRecord::Base
 has_secure_password
end

Таким образом, будет миграция для того же, то есть:

def change
 create_table :wa_players, :id => false do |t|
  t.id :String
  t.playerName :String
  t.uuid :String
  t.password :String
  t.money :String
  t.itemsSold :String
  t.itemsBought :String
  t.earnt :String
  t.spent :String
  t.Permissions :String
  t.Locked :String
  t.timestamps null: false
  end
 add_index :wa_players, :id
end

Содержимое миграции неверно, его необходимо обновить с помощью:

def change
 create_table :wa_players, :id => false do |t|
  t.string :id
  t.string :player_name
  t.string :uuid
  t.string :password
  t.string :money
  t.string :items_sold
  t.string :items_bought
  t.string :earnt
  t.string :spent
  t.string :permissions
  t.string :locked
  t.timestamps null: false
 end
  add_index :wa_players, :id
end

Теперь вам нужно запустить

rake db:create 

если база данных не была перенесена, запустите

rake db:migrate.
0 голосов
/ 16 мая 2018

Это будет t.string тогда column_name как

def change
    create_table :wa_players, :id => false do |t|
      t.string :id
      t.string :player_name
      t.string :uuid
      t.string :password
      t.string :money
      t.string :items_sold
      t.string :items_bought
      t.string :earnt
      t.string :spent
      t.string :permissions
      t.string :locked
      t.timestamps null: false
    end
    add_index :wa_players, :id, unique: true
end

Посмотрите на это Creating a Table

Обновление

Я не знаю, как вы пытаетесь, но следуйте этим шагам

  1. запустите консоль как rails g model WaPlayer

  2. Перейти к db/migrate/TIMESTAMP_create_wa_players.rb

  3. Затем вставьте этот change метод в class

  4. Затем запустите rails db:migrate или rake db:migrate после rake db:create, если вы до сих пор не создали БД

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