我有两种型号:TimeLogTaskTimeLog属于Task并且Task有许多TimeLogs。
过去有些Tasks被删除,但相应的TimeLogs没有被删除(级联删除不起作用)。所以我们有一些破裂的TimeLog,它们确实有一个task_id,但是task_id不再存在了。
我有两个问题:
1)我想从一个用户那里得到所有的TimeLogs,但是过滤掉坏的。

TimeLog.find(:all, :conditions => ['time_log.user_id = ? and <time_log.task_id exists>])

2)我想让控制台中所有损坏的TimeLogs手动删除它们。

TimeLog.find(:all, :conditions => [<!time_log.task_id exists>])

我该怎么做?
谢谢

最佳答案

在您的where()调用链中添加如下内容,以包括任何孤立的ActiveRelations:

.where('NOT EXISTS SELECT * FROM tasks where tasks.id = timelogs.task_id')

…显然,如果删除TimeLog,则会显式排除任何孤立记录。

关于ruby - Rails 3-查找条件以过滤损坏的引用完整性关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9471395/

10-13 02:10