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


  ActiveRecord :: InvalidForeignKey:Mysql2 :: Error:无法添加或更新子行:外键约束失败(heroku_b08bb4ad8dfb726posts,CONSTRAINT fk_rails_5b5ddfd518外键(user_id)参考users()):插入idpostsidtitledescriptionuser_idcategory_idcreated_at)值(1,“标题”,“ 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


如果您需要更多的代码片段,请告诉我。非常感谢您提供有关此问题的任何想法。

最佳答案

您还需要在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或随机记录以避免约束失败

关于mysql - Rails + Heroku:外键约束失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39200346/

10-12 02:30