我知道这可能是在互联网上的某个地方,但我找不到答案在这里的Stackoverflow,所以我想我可能会提高知识库在这里一点。我是Ruby和Rails的新手,但我的公司在这方面投入了很多,所以我想更详细地了解它。对我来说,很难改变我的心态,从“模型”而不是从数据库设计应用程序,所以我试图弄清楚如何在Rails模型中完成我在数据库中经典完成的所有设计工作。所以我给自己的最新任务是弄清楚如何配置Rails数据库模型来进行级联删除?有没有简单的方法来做到这一点?或者我必须进入MySql并设置它?
tcomlyy61#
你也可以设置:dependent选项为:delete_all.:delete_all将发出一条SQL语句来删除所有的子记录.因此使用:delete_all可以给予更好的性能.
has_many :memberships, dependent: :delete_all
字符串
b5lpy0ml2#
是的,你可以,如果你使用像has_many这样的关系,你只需这样做
has_many :memberships, dependent: :destroy
bbuxkriu3#
与所提供的答案相反,我强烈建议在数据库级别上也这样做。如果您有不同的进程或多线程环境,可能会发生记录未正确删除的情况。此外,数据库外键在删除大量数据时可以更快地删除。就像在建议的答案中这样做:
字符串但是,也要确保在迁移中设置foreign_key。这样数据库会自动为您删除记录。要在删除成员资格时使值无效,假设您有一个用户模型:
foreign_key
add_foreign_key :users, :memberships, on_delete: :nullify
型您还可以在删除成员资格时删除所有模型
add_foreign_key :users, :memberships, on_delete: :cascade
型
b91juud34#
请记住,delete_all不会对子记录执行任何回调(如before_destroy和after_destroy)。
34gzjxbg5#
看起来这个插件可能会给你给予你想要的东西,如果你想在实际的数据库结构中反映级联删除:http://www.redhillonrails.org/foreign_key_migrations.html在迁移中使用此方法的格式如下所示:
create_table :orders do |t| t.column :customer_id, :integer, :on_delete => :set_null, :on_update => :cascade ... end
5条答案
按热度按时间tcomlyy61#
你也可以设置:dependent选项为:delete_all.:delete_all将发出一条SQL语句来删除所有的子记录.因此使用:delete_all可以给予更好的性能.
字符串
b5lpy0ml2#
是的,你可以,如果你使用像has_many这样的关系,你只需这样做
字符串
bbuxkriu3#
与所提供的答案相反,我强烈建议在数据库级别上也这样做。如果您有不同的进程或多线程环境,可能会发生记录未正确删除的情况。此外,数据库外键在删除大量数据时可以更快地删除。
就像在建议的答案中这样做:
字符串
但是,也要确保在迁移中设置
foreign_key
。这样数据库会自动为您删除记录。要在删除成员资格时使值无效,假设您有一个用户模型:
型
您还可以在删除成员资格时删除所有模型
型
b91juud34#
请记住,delete_all不会对子记录执行任何回调(如before_destroy和after_destroy)。
34gzjxbg5#
看起来这个插件可能会给你给予你想要的东西,如果你想在实际的数据库结构中反映级联删除:
http://www.redhillonrails.org/foreign_key_migrations.html
在迁移中使用此方法的格式如下所示:
字符串