标签: dependent-destroy

Rails用两者做什么:dependent =>:destroy和cascade delete/nullify/restrict

我正在尝试决定如何最好地设置(如果有的话)我的rails应用程序的外键约束.我有一个模型Response,belongs_to一个Prompt.我想使用:dependent => :destroy每个Response属于删除的每个调用destroy Prompt,我试图决定我应该在我的外键上放置什么删除约束.

简而言之,我想要了解如何最好地利用依赖对象的destroy方法和外键约束,以确保cruft不会累积并反映存储数据的逻辑结构.几个早期的问题,比如我应该使用ON DELETE CASCADE,:dependent =>:destroy,还是两者都有?Rails:删除cascade vs dependent destroy询问哪个更好但是他们并没有真正说明两个选择如何相互作用以及它们被触发的顺序或者看起来模糊不清.

正如我所看到的那样,考虑因素似乎分为几个方面:

  1. :dependent => :destroy在从数据库中删除父对象之前,调用是否首先在依赖对象上进行销毁,因此即使我使用级联删除,仍会在这些对象上调用destroy?
  2. 是否:dependent => :destroy从数据库中移除父项之前(或在事务中)从数据库中删除依赖对象?换句话说,如果我将cascade设置为nullify,数据库最终会在删除子对象之前浪费地取消它们的引用吗?

  3. 是否由于原始销毁和链接:dependent => :destroy选项包含在事务中而发出删除,或者遗憾的是,如果我没有设置级联删除,则会在数据库中暂时崩溃?

  4. :dependent => :destroy如果我使用restrict作为外键on_delete选项,最后将确保从数据库中删除父对象?

cascade ruby-on-rails foreign-keys dependent-destroy

13
推荐指数
1
解决办法
824
查看次数

Rails依赖哪些选项可能?

我在Rails 4中收到以下错误

依赖选项必须是destroy delete之一

显然https://github.com/rails/rails/issues/3458之前支持其他选项.但是现在有什么可能呢?我找不到任何其他文件

谢谢您的帮助

ruby-on-rails destroy dependent-destroy ruby-on-rails-4

12
推荐指数
1
解决办法
6078
查看次数

除非父项被删除,否则rails会阻止删除子项

在Ruby on Rails 4中,假设父母有很多孩子.删除父项后,还必须删除子项.除此之外,除非儿童是孤儿,否则不得删除儿童.怎么做?

我尝试了以下内容

class Parent < ActiveRecord::Base
  has_many :children, inverse_of: :parent, dependent: :destroy
end

class Child < ActiveRecord::Base
  belongs_to :parent, inverse_of: :children
  before_destroy :checks
private
  def checks
    not parent # true if orphan
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,使用before_destroy检查,不会删除任何内容.如果被调用的原因是因为父删除,有没有办法告诉这个方法?

要求这是一件奇怪的事吗?我的意思是,防止删除孩子.

has-and-belongs-to-many dependent-destroy ruby-on-rails-4

8
推荐指数
1
解决办法
1444
查看次数

在Relationship模型中添加依赖:destroy的测试(第11章,练习1 Rails教程,第2版)

很确定这些测试工作正常.通过删除has_many:relationships上的dependent :: destroy选项以及user.rb中的has_many:reverse_relationships来解决它们.

想要分享我所做的事情以防其他人通过Michael Hartl的Rails教程第2版,第11章练习.

这个练习产生了一些问题(见本文的底部).如果有人能提供帮助,那就太好了.

第11章,练习1:

按照清单10.15中的示例,在关系模型(清单11.4和清单11.16)中添加依赖关系:destroy的测试.

这是我的测试: spec/models/user_spec.rb

require 'spec_helper'

describe User do

  before do
  @user = User.new(name: "Example User", email: "user@example.com", 
                   password: "foobar", password_confirmation: "foobar")
  end

  subject { @user }

  [...code omitted...]

  describe "relationship associations" do
    let(:other_user) { FactoryGirl.create(:user) }
    before do
      @user.save
      @user.follow!(other_user)
      other_user.follow!(@user)
    end

    it "should destroy associated relationships" do
      relationships = @user.relationships
      @user.destroy
      relationships.should be_empty
    end

    it "should destroy associated reverse relationships" do
      reverse_relationships = @user.reverse_relationships
      @user.destroy
      reverse_relationships.should be_empty
    end
  end
Run Code Online (Sandbox Code Playgroud)

这个练习产生了几个问题:

问题1: …

rails-console ruby-on-rails-3 railstutorial.org dependent-destroy

7
推荐指数
1
解决办法
3257
查看次数

如何从rails中的HABTM连接表中删除条目?

通过多次迭代测试,我只注意到我的连接表代表了两个模型之间的HABTM关系,当删除这些模型的实例时,它不会删除条目.删除具有HABTM关系的模型实例时,是否需要执行一些特殊操作?

mysql ruby-on-rails has-and-belongs-to-many relationships dependent-destroy

6
推荐指数
1
解决办法
2998
查看次数

如何使用has_many,:dependent =>:destroy来销毁记录

我在一些插件的帮助下构建了一个Rail 3 AuditLog,它将数据存储在AuditLog表中,并带有以下用于标识的字段(feeded_id,feeded_type)

所以在我的情况下,我有一张photoalbum,有很多照片.

class PhotoAlbum < ActiveRecord::Base
has_many :photos, :dependent => :destroy
Run Code Online (Sandbox Code Playgroud)

当我删除photoalbum(id = 2)时,这可以很好地删除所有相关照片,但它不会删除AuditLog中的项目,如下所示:(feeded_id = 2,feeded_type = PhotoAlbum)

鉴于AuditLog表没有"photo_album_id"列,并且不能,是否有办法在删除PhotoAlbum时设置依赖> Destory with Rails删除teh AuditLog中的所有相关项?

谢谢,我知道这个比大多数人复杂一点.感谢您阅读!

ruby-on-rails ruby-on-rails-3 dependent-destroy

6
推荐指数
1
解决办法
1万
查看次数

通过活动作业处理依赖性破坏

我有几个有很多孩子的模特.依赖性破坏变得非常沉重.任何人都知道如何将依赖性破坏与活跃的工作联系起来?或者,我唯一的选择是通过父模型上的回调删除依赖的销毁和角色我自己的工作?

dependent-destroy ruby-on-rails-4 rails-activejob

5
推荐指数
1
解决办法
910
查看次数

Rails has_many关联删除父对象但不删除子对象

场景是有两个模型,一个是Room,另一个是Tickets,关系是Room has_many:ticket.

要求是当房间正在删除时不应删除票证.如何实现这一点,因为票证表有外键称为room_id?

并且假设我能够这样做,那么我将如何获得该特定票的房间信息?

ruby-on-rails associations has-many dependent-destroy

1
推荐指数
1
解决办法
562
查看次数