强制ActiveScaffold删除关联,而不是将外键设置为null

时间:2011-06-16 01:43:39

标签: ruby-on-rails activerecord activescaffold

我在RoR 2.2项目中使用ActiveScaffold。我的应用程序中有两个模型:

class Foo << ActiveRecord::Base
 belongs_to :bar
end

class Bar << ActiveRecord::Base
 has_many :foos
end

当我编辑Bar实例时,属于该栏的所有foo实例都显示在表单中,每个实例旁边都有一个删除按钮。

当我删除一个然后按“更新”按钮时,现在ActiveScaffold将Foo.bar_id设置为nil并发布和更新UPDATE foo set bar_id = null ...之类的语句。

有没有办法从数据库中删除关联(即delete foo where foo_id = ...)?

2 个答案:

答案 0 :(得分:0)

以下内容应达到您所期望的效果。请记住,我没有运行或测试过此代码。

class Bar < ActiveRecord::Base

  has_many :foos, :dependent => :destroy, :after_remove => :delete_orphan

  def delete_orphan(foo)
    foo.destroy
  end

end

修改:切换到更具体的回调

答案 1 :(得分:0)

我在Rails 3.1中使用它。

删除文档时,所有关联的DocumentFoo也会被删除。

class Document < ActiveRecord::Base
  has_many :document_foos

  before_destroy { |record| DocumentFoo.destroy_all "document_id = #{record.id}" }
end

BR, 纳斯