我在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 = ...
)?
答案 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, 纳斯