Ruby on rails Rails:违反外键约束

Ruby on rails Rails:违反外键约束,ruby-on-rails,ruby,reference,foreign-keys,relational-database,Ruby On Rails,Ruby,Reference,Foreign Keys,Relational Database,我有三种模式:图书,流派,图书流派,以下是它们之间的关系: class BookGenre < ActiveRecord::Base belongs_to :book belongs_to :genre end class Book < ActiveRecord::Base has_many :book_genres has_many :genres, through: :book_genres end class Genre < ActiveRecor

我有三种模式:
图书
流派
图书流派
,以下是它们之间的关系:

class BookGenre < ActiveRecord::Base
  belongs_to :book
  belongs_to :genre
end


class Book < ActiveRecord::Base
  has_many :book_genres
  has_many :genres, through: :book_genres
end


class Genre < ActiveRecord::Base
  has_many :book_genres
  has_many :books, through: :book_genres
end
在myseed.rb中

Book.destroy_all
Genre.destroy_all
...create data 
试试这个:

ActiveRecord::Base.connection.disable_referential_integrity do
    Book.destroy_all
    Genre.destroy_all
    # ...create data 
end

dependent::destroy
选项添加到您的
中有许多定义

然而,尊重数据完整性的更好选择是在数据库级别设置
级联删除
:例如,您有
注释
表和
用户
表。用户有许多注释您想在表
comments
中添加一个外键,并设置在用户被销毁时删除注释,您将执行以下操作(cascade
选项将确保此操作):


是 啊你帮了大忙,谢谢。你在数据库级别设置了吗?@JonathanTuzman
添加外键(:comments,:users,column::user_id,on_delete::cascade)
ActiveRecord::Base.connection.disable_referential_integrity do
    Book.destroy_all
    Genre.destroy_all
    # ...create data 
end
add_foreign_key(
  :comments,
  :users,
  column:
  :user_id,
  on_delete: :cascade
)