我有一个作用域来限制所有 问题
是否由用户投票决定。在模型中:
scope :answered_by, lambda {|u| joins(:votes).where("votes.user_id = ?", u.id) }
scope :unanswered_by, lambda {|u| joins(:votes).where("votes.user_id != ?", u.id) }
在控制器中,我这样调用它们:@answered = Question.answered_by(current_user)
@unanswered = Question.unanswered_by(current_user)
unanswered_by 范围不正确。我实际上想找到没有投票的地方。相反,它正在尝试查找是否存在一个不等于当前用户的投票。有什么想法可以返回所有不存在联接的记录吗?
NOT IN
比起对应的NOT EXISTS
永远不会更正确,也不会更快。本质上,NOT IN
是有害的。(我只是不喜欢这个“反模式”一词) - wildplasserNULL
。只不过这种情况很少见。 - Erwin BrandstetterNOT IN
必须删除重复项(即排序),包括可怕的NULLS。(聪明的规划者(==简单计划)可能知道何时不进行排序,但是)我仍然需要找到实际需要IN
的情况。NOT IN
甚至更糟...(顺便说一句:我认为我的数独求解器中有几个NOT IN
。是时候重写了...) - wildplasser