2016-08-29 185 views
0

我試圖種子我的MySQL數據庫我的Rails項目我的Heroku的服務器上,我得到這個錯誤:的Rails +的Heroku:外鍵約束失敗

ActiveRecord::InvalidForeignKey: Mysql2::Error: Cannot add or update a child row: a foreign key constraint fails (heroku_b08bb4ad8dfb726 . posts , CONSTRAINT fk_rails_5b5ddfd518 FOREIGN KEY (user_id) REFERENCES users (id)): INSERT INTO posts (id , title , description , user_id , category_id , created_at , updated_at) VALUES (1, 'Title', 'Desc', 1, 1, '2016-08-29 06:53:04', '2016-08-29 06:53:04')

出人意料的是,我沒有得到這個錯誤在我的開發環境。

種子文件提取物看起來是這樣的:

# Creating Users here 

Category.create!([ 
    { id: 1, name: "Category"}, 
]) 

Post.create!([ 
{ id: 1, title: "Title", description: "Desc", user_id: "1", category_id: "1" }, 
]) 

Post模型:

class Post < ApplicationRecord 
    belongs_to :user 
    belongs_to :category 
    has_many :comments 
    validates :title, :description, presence: true 
end 

分類模型:

class Category < ApplicationRecord 
    has_many :posts 
end 

如果您在評論中需要更多代碼片段,請告知我們。非常感謝你對這個問題的任何想法。

回答

1

您還需要在您的seed.rb

約束是無法創建用戶,因爲你沒有user在你的數據庫確實與id = 1

在你的種子文件添加此

user = User.create(
    # user attributes like `name` 
) 

Post.create!([ 
{ id: 1, title: "Title", description: "Desc", user_id: user.id, category_id: "1" }, 
]) 

此外,我會建議,而不是硬編碼的值,如user_id你應該使用firstlast或隨機記錄以避免約束失敗

+0

謝謝您的回答。對不起,我已經在種子文件中創建了用戶。編輯了我的問題。 – patrick

+0

然後確保你傳遞用戶的'user_id'存在 –

+0

現在我在這裏面對這個問題:http://stackoverflow.com/questions/39200815/mysql-rails-errno-150-foreign-key-constraint-是-錯誤地形成的 – patrick