我有两个模型:TimeLog
和Task
。 TimeLog
属于Task
,Task
有TimeLog
个。
过去有些Task
已被删除,但相应的TimeLog
未被删除(级联删除无效)。所以我们有一些破碎的TimeLog
。它们确实有task_id
但task_id
不再存在。
我有两个问题:
1)我想从用户那里获得所有TimeLog
,但是过滤掉了那些。{1}}。
即
TimeLog.find(:all, :conditions => ['time_log.user_id = ? and <time_log.task_id exists>])
2)我想让控制台中所有损坏的TimeLog
手动删除它们。
即
TimeLog.find(:all, :conditions => [<!time_log.task_id exists>])
我该怎么做?
由于
答案 0 :(得分:3)
在您的where()
来电链中添加以下ActiveRelation
之类的内容,以包含任何孤立的TimeLog
:
.where('NOT EXISTS SELECT * FROM tasks where tasks.id = timelogs.task_id')
...显然,如果删除NOT
,您将明确排除任何孤立的记录。
答案 1 :(得分:0)
用于跟踪缺少的数据库索引的rake任务:https://github.com/eladmeidar/rails_indexes