.where.not与空数组

时间:2014-11-24 22:44:19

标签: ruby-on-rails postgresql activerecord

我试图以优雅的方式使用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

1 个答案:

答案 0 :(得分:1)

这是ActiveRecord方式:

def remaining_characters
  characters = self.characters_selected
  Character.where.not(:name => characters) 
end

当characters.empty? where子句变为" WHERE(1 = 1)"。