我有两种型号:TimeLog
和Task
TimeLog
属于Task
并且Task
有许多TimeLog
s。
过去有些Task
s被删除,但相应的TimeLog
s没有被删除(级联删除不起作用)。所以我们有一些破裂的TimeLog
,它们确实有一个task_id
,但是task_id
不再存在了。
我有两个问题:
1)我想从一个用户那里得到所有的TimeLog
s,但是过滤掉坏的。
即
TimeLog.find(:all, :conditions => ['time_log.user_id = ? and <time_log.task_id exists>])
2)我想让控制台中所有损坏的
TimeLog
s手动删除它们。即
TimeLog.find(:all, :conditions => [<!time_log.task_id exists>])
我该怎么做?
谢谢
最佳答案
在您的where()
调用链中添加如下内容,以包括任何孤立的ActiveRelation
s:
.where('NOT EXISTS SELECT * FROM tasks where tasks.id = timelogs.task_id')
…显然,如果删除
TimeLog
,则会显式排除任何孤立记录。关于ruby - Rails 3-查找条件以过滤损坏的引用完整性关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9471395/