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
)