【发布时间】:2013-09-23 19:20:59
【问题描述】:
我以这种方式设置了关联。
class Program
has_many :program_activities, dependent: :destroy
has_many :recent_activities, through: :program_activities, source: :recent_activity
end
class RecentActivity
has_many :program_activities, dependent: :destroy
end
我想删除与程序对象关联的recent_activities。
program.recent_activities.destroy_all
但上面的查询实际上只是删除(请注意删除而不是销毁)program_activities 并单独留下recent_activities 对象。
我通过检查 rails 控制台查询发现了这一点,destroy_all 方法是否有问题,或者我实际上是否错误地设置了关联。
【问题讨论】:
-
通过查看rails代码
activerecord-4.2.11/lib/active_record/associations/has_many_through_association.rb#211,它调用delete方法,这意味着它直接从数据库中删除记录。如果你想触发destroy,考虑使用has_many而不使用through。在activerecord-4.2.11/lib/active_record/associations/has_many_association.rb#169中,会调用destory!方法。
标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2