ruby-on-rails - .where.not 空数组

标签 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

最佳答案

这是 ActiveRecord 方式:

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

什么时候characters.empty? where 子句变为“WHERE (1=1)”。

关于ruby-on-rails - .where.not 空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115562/

相关文章:

sql - postgresql 数据库中的 PNG 图像

mysql - 当我用信息填充表时,我是否会丢失表的 3NF

ruby-on-rails - ActiveRecord bool 验证接受非 bool 值

php - 更好的 MongoDB 文档对象映射器设计模式

forms - Yii - 在一个表单提交中的多个记录

ruby-on-rails - Rails 在 S3 上为回形针图像设置代理?

ruby-on-rails - 我应该限制登录 rails 的尝试吗?

ruby-on-rails - Rails 与多个自定义字段名称关联?

ruby-on-rails - 创建后 ActiveAdmin 重定向?

ruby-on-rails - 存储时间间隔的有效方法