Rails 4:搜索没有具有属性的子项的模型

时间:2017-04-05 19:26:21

标签: ruby-on-rails ruby activerecord

必须有更好的方法来做到这一点。说我有:

class SomeModel < ActiveRecord::Base
  has_many :taggings
  has_many :tags, through: :taggings
end

class Tagging < ActiveRecord::Base
  belongs_to :some_model
  belongs_to :tag
end

class Tag
  # Attributes:
  # - name:string
  # - is_bad:boolean
  has_many :taggings
  has_many :some_models, through: taggings
end

有些标签不好,有些标签不是。

我想在SomeModel scope :not_bad上使用一个范围,以便我得到任何不具有任何不良标记的SomeModel(is_bad == true)。

乍一看:

SomeModel.joins(taggings: :tag).where('tags.is_bad = FALSE')

找到所有已标记 SomeModels而没有错误标记。当然。但是没有标记的SomeModels呢?它们并不坏......至少现在还没有。我需要尝试包含,以查找没有标记的记录:

SomeModel.includes(taggings: :tag).where('tags.is_bad = FALSE')

不起作用,错误。查看生成的SQL表明我根本没有得到连接语句。我阅读了一些文档并查看了参考文献,给了我:

SomeModel.includes(taggings: :tag).where('tags.is_bad = FALSE').references(taggings: :tag)

哪个运行,但只是重现连接的输出......

此刻,我离开了这个功能性但可怕的:

SomeModel.where.not(id: SomeModel.joins(taggings: :tag).where('tags.is_bad = TRUE').pluck(:id))

需要多次查询,感觉很可怕。

我知道必须有一个很好的方法来做到这一点,我在这里缺少什么?

0 个答案:

没有答案