我试图以优雅的方式使用NOT IN查询(使用Rails 4 / Postgres,作为参考)时遇到问题。我正在尝试获取特定模型的所有对象的列表,这些对象未显示在特定实例的连接表中。它可以工作,当您尝试使用空数组的NOT IN查询时,它会抛出一个错误,因为您无法查找NOT IN NULL。
以下代码现在有效,但有没有比使用不直观的条件制作伪空对象更好的方法?
def characters_selected
self.characters_tagged.pluck(:name)
end
def remaining_characters
characters = self.characters_selected
characters = ["SQL breaks if this is null"] if characters.empty?
# this query breaks on characters_selected == [] without the above line
Character.where("name NOT IN (?)", characters )
end
答案 0 :(得分:1)
这是ActiveRecord方式:
def remaining_characters
characters = self.characters_selected
Character.where.not(:name => characters)
end
当characters.empty? where子句变为" WHERE(1 = 1)"。