【发布时间】:2013-05-30 18:55:59
【问题描述】:
我有 3 个模型:
调度
belongs_to :service
服务
belongs_to :user, :foreign_key => "owner"
has_many :shedules, :dependent => :destroy
用户
has_many :services, :foreign_key => "owner", :dependent => :destroy
has_many :shedules, :through => :services, :foreign_key => "owner", :dependent => :destroy
然后我可以通过my_user.shedules看到所有用户的shedules
我的目标是删除所有用户,然后我尝试my_user.shedules.delete_all,但收到此错误:
ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection: 无法修改关联“用户#shedules”,因为源 反射类“Shedule”通过 :has_many 关联到“服务”。
经过一番谷歌搜索,我找到了this 和其他一些类似的帖子,但它们都不适合我的问题。
当然,我可以通过迭代用户服务来删除它
my_user.services.each do |s|
s.shedules.delete_all
end
但我很有趣为什么 my_user.shedules.delete_all 不起作用。
谢谢!
【问题讨论】:
-
尝试从
has_many :shedules, :through => :services, :foreign_key => "owner", :dependent => :destroy中删除foreign_key -
不幸的是,同样的错误
-
stackoverflow.com/questions/1399394/… 使用
destroy来触发:dependent => :destroy的回调 -
我只想删除shedules,而不是它们所属的服务。
标签: ruby-on-rails activerecord associations