我在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,乔纳斯