我有3个型号:
Shedule
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
我的目标是删除所有用户,然后我尝试my_user.shedules.delete_all
但是会收到此错误:
的ActiveRecord :: HasManyThroughCantAssociateThroughHasOneOrManyReflection: 无法修改关联' User#shedules'因为来源 反思课' Shedule'与“服务”相关联via:has_many。
经过一些谷歌搜索后,我发现this和其他一些类似的帖子,但所有这些帖子都不适合我的问题。
当然,我可以通过迭代像
这样的用户服务来删除它my_user.services.each do |s|
s.shedules.delete_all
end
但我很有意思my_user.shedules.delete_all
为什么不工作。
谢谢!
答案 0 :(得分:2)
找到了比以前介绍的解决方案更简单的解决方案。
int[] customOrder = { 100, 0, 50, 150, 250, 500, 1000, 2500, 5000, 10000, 50000 };
var Result = lstQuatationResult
.OrderBy(x => x.planMaximum)
.OrderBy(x => x.planDeductible)
.OrderBy(x => Array.IndexOf(customOrder, x));
我之所以喜欢它,是因为它只是一个数据库查询,而且我不必记住外键的名字。
它之所以有效,是因为:
Schedule.merge(my_user.schedules).delete_all
答案 1 :(得分:1)
尝试: -
my_user.shedules.destroy_all
OR
Shedule.delete_all(:owner => my_user.id)
答案 2 :(得分:0)
我不确定您是否可以使用关联删除schedules
。您可以自行查找这些记录来删除这些记录。
Shedule.where(service_id: user.services.pluck(&:id)).delete_all
user.reload # optional
如果您经常使用此功能,则可以在User
def delete_schedules
Shedule.where(service_id: user.services.pluck(&:id)).delete_all
end