我没有得到的东西......
我的模型中有这个:
class Model < ActiveRecord::Base
has_many :model_options # a link table for many to many
has_many :options,
:through => :model_options,
:dependent => :destroy,
:foreign_key => 'model_id'
end
我尝试这样做:
model = Model.find(id)
model.options.delete # also tried model.options.delete_all
但这不是从数据库中删除记录。 相反,我必须这样做:
model.options.each do |option|
option.delete
end
......这不是最好的方式。
那么最好的方法是什么?
答案 0 :(得分:10)
model.options.clear
答案 1 :(得分:4)
加里是对的: model.options.clear
但如果符合您的需求,您可以进一步将其与模型回调相关联
class Model < ActiveRecord::Base
has_many :model_options # a link table for many to many
has_many :options,
:through => :model_options,
:dependent => :destroy,
:foreign_key => 'model_id'
# Clear options records before destroy
before_destroy :clear_options
protected
def clear_options
options.clear
end
end
或者您可以使用this plugin来强制实施FK关系,从数据库中添加数据库触发器(如果您的特定数据库风味支持它们)。
我希望maight帮助你
答案 2 :(得分:1)
在Rails 3中,你所要做的只是:dependent => :destroy
而ActiveRecord会处理其余的事情