【问题标题】:Rails + Heroku: A foreign key constraint failsRails + Heroku:外键约束失败
【发布时间】:2016-08-29 07:06:34
【问题描述】:

我正在尝试在我的 Heroku 服务器上为我的 Rails 项目播种我的 MySQL 数据库,但出现此错误:

ActiveRecord::InvalidForeignKey: Mysql2::Error: 无法添加或更新子行:外键约束失败 (heroku_b08bb4ad8dfb726.posts, CONSTRAINT fk_rails_5b5ddfd518 FOREIGN KEY (user_id) 参考users (id)): INSERT INTO posts (id, title, description, user_id, category_id, created_at, updated_at, '标题' 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" },
])

后模型:

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

如果您在 cmets 中需要更多代码 sn-ps,请告诉我。非常感谢您对此问题的任何想法。

【问题讨论】:

    标签: mysql ruby-on-rails heroku


    【解决方案1】:

    您还需要在 seed.rb

    中创建用户

    约束失败,因为您的数据库中没有userid = 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 或随机记录以避免约束失败

    【讨论】:

    • 感谢您的回答。抱歉,我之前已经在种子文件中创建了用户。已编辑我的问题。
    • 然后确保您传递给用户的user_id 存在
    • 现在我在这里遇到了这个问题:stackoverflow.com/questions/39200815/…
    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 2013-03-04
    • 2016-08-17
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    相关资源
    最近更新 更多