2017-06-22 54 views
1

在提交問題之前,我嘗試使用每個stackoverflow.com類似的參數。但我沒有發現問題。 我使用的鐵軌5.1.1和MySQL 5.7 我這個所謂的移民類:Mysql2 ::錯誤:表'table_name'不存在:從`table_name`顯示完整的字段

class CreateCompanies < ActiveRecord::Migration[5.1] 
    def change 
    create_table :companies do |t| 
    t.string :ragione_sociale 
    t.references :forma_giuridica, foreign_key: true 
    t.string :telefono_fisso 
    t.string :fax 
    t.string :pec 
    t.string :mail 
    t.string :web_site 
    t.string :cellulare_emergenze 
    t.string :via_legale 
    t.string :n_civico_legale 
    t.string :citta_legale 
    t.string :cap_legale 
    t.string :provincia_legale 
    t.string :regione_legale 
    t.string :via_operativa 
    t.string :n_civico_operativa 
    t.string :citta_operativa 
    t.string :cap_operativa 
    t.string :provincia_operativa 
    t.string :regione_operativa 
    t.string :pi 
    t.string :cf 
    t.string :ateco_primo 
    t.string :ateco_secondo 
    t.string :ateco_altro 
    t.timestamps 
    end 
    end 
end 

我有一個空的模型calledny.rb和一個叫companies_controller.rb控制器。

database.yml是:

# MySQL. Versions 5.1.10 and up are supported. 
# 
# Install the MySQL driver 
# gem install mysql2 
# 
# Ensure the MySQL gem is defined in your Gemfile 
# gem 'mysql2' 
# 
# And be sure to use new-style password hashing: 
# http://dev.mysql.com/doc/refman/5.7/en/old-client.html 
# 
default: &default 
    adapter: mysql2 
    encoding: utf8 
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 
    username: root 
    password: Pipipopo09 
    host: localhost 
    port: 3300 

development: 
    <<: *default 
    database: Pluto_Demetra_development 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    <<: *default 
    database: Pluto_Demetra_test 

# As with config/secrets.yml, you never want to store sensitive information, 
# like your database password, in your source code. If your source code is 
# ever seen by anyone, they now have access to your database. 
# 
# Instead, provide the password as a unix environment variable when you boot 
# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database 
# for a full rundown on how to provide these environment variables in a 
# production deployment. 
# 
# On Heroku and other platform providers, you may have a full connection URL 
# available as an environment variable. For example: 
# 
# DATABASE_URL="mysql2://myuser:[email protected]/somedatabase" 
# 
# You can use this database configuration with: 
# 
# production: 
#  url: <%= ENV['DATABASE_URL'] %> 
# 
production: 
    <<: *default 
    database: Pluto_Demetra_production 
    username: Pluto_Demetra 
    password: <%= ENV['PLUTO_DEMETRA_DATABASE_PASSWORD'] %> 

當運行rails db:migrate我有以下錯誤:

== 20170621125622 CreateCompanies: migrating ================================== 
-- create_table(:companies) 
rails aborted! 
StandardError: An error has occurred, all later migrations canceled: 

Mysql2::Error: Table 'pluto_demetra_development.companies' doesn't exist: SHOW FULL FIELDS FROM `companies` 
C:/Users/gvieri.BSNSTRATEGIES/SitiRuby/Pluto_Demetra/db/migrate/20170621125622_create_companies.rb:3:in `change' 
bin/rails:4:in `require' 
bin/rails:4:in `<main>' 
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'pluto_demetra_development.companies' doesn't exist: SHOW FULL FIELDS FROM `companies` 
C:/Users/gvieri.BSNSTRATEGIES/SitiRuby/Pluto_Demetra/db/migrate/20170621125622_create_companies.rb:3:in `change' 
bin/rails:4:in `require' 
bin/rails:4:in `<main>' 
Mysql2::Error: Table 'pluto_demetra_development.companies' doesn't exist 
C:/Users/gvieri.BSNSTRATEGIES/SitiRuby/Pluto_Demetra/db/migrate/20170621125622_create_companies.rb:3:in `change' 
bin/rails:4:in `require' 
bin/rails:4:in `<main>' 
Mysql2::Error: Cannot add foreign key constraint 
C:/Users/gvieri.BSNSTRATEGIES/SitiRuby/Pluto_Demetra/db/migrate/20170621125622_create_companies.rb:3:in `change' 
bin/rails:4:in `require' 
bin/rails:4:in `<main>' 
Tasks: TOP => db:migrate 
(See full trace by running task with --trace) 

我嗬,你能幫助我。提前致謝。

回答

0

::遷移[5.0]使用主鍵INT(11)

::遷移[5.1]使用主鍵bigint(20)

最常見的原因是當creati納克外鍵,無論是引用字段和外鍵字段需要匹配:

  • 引擎應該是相同的例如InnoDB
  • 數據類型應該是相同的,並且具有相同的長度。
    例如VARCHAR(20)或INT(10)UNSIGNED
  • 整理應該是相同的。 例如utf8
  • 唯一 - 外鍵應該指的是在參考表中唯一(通常爲私人)的字段。
4

這很可能是由ActiveRecord :: Migration [5.1]引起的。當您要將外鍵添加到companies表中時,遷移首先讀取表,但不存在。

更改遷移到5.0適合我。

class CreateCompanies < ActiveRecord::Migration[5.0] 
end 

或者在第一去除異物選項,以及手動添加後外鍵:

class CreateCompanies < ActiveRecord::Migration[5.1] 
    def change 
    create_table :companies do |t| 
     t.string :ragione_sociale 
     t.references :forma_giuridica # without :foreign_key option 
     # ... 
    end 

    # add foreign key here 
    add_reference :companies, :forma_giuridica 
    end 
end 
+0

這是我的工作 – vierigianni

相關問題