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



我在RoR2.2项目中使用ActiveScaffold。我的应用程序中有两种型号:

class Foo << ActiveRecord::Base
 belongs_to :bar
end
class Bar << ActiveRecord::Base
 has_many :foos
end

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

当我删除一个并按下Update按钮时,ActiveScaffold现在将Foo.bar_id设置为nil,并发出类似UPDATE foo set bar_id = null ...的更新语句。

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

下面这样的东西应该能达到你想要的效果。请记住,我还没有运行或测试此代码。

class Bar < ActiveRecord::Base
  has_many :foos, :dependent => :destroy, :after_remove => :delete_orphan
  def delete_orphan(foo)
    foo.destroy
  end
end

编辑:切换到更具体的回调

我在Rails 3.1中使用这个。

当我删除一个文档时,所有相关的DocumentFoo也会被删除。

class Document < ActiveRecord::Base
  has_many :document_foos
  before_destroy { |record| DocumentFoo.destroy_all "document_id = #{record.id}" }
end

Br,乔纳斯

相关内容

  • 没有找到相关文章

最新更新