说我有这个简化的模型设置如何查找没有关联的数据库记录?
用户:
has_many :logs
登录:
attr_accessible :key, :value
belongs_to :user
当用户接触,应用程序创建了
Log.create(user: user, key: "contacted", value: "by admin")
日志此事件
有许多其他类型的日志,由t继承人key
属性值。
我想写一个范围,将返回所有从未联系过的用户。
到目前为止,我有
scope :never_contacted, -> { joins(:logs).where.not("logs.key = ?", "contacted").uniq }
不幸的是,这似乎只返回比“接触”等日志,并留下了具有完全没有日志的用户。
我想有可能以“反”积极的查询,例如
scope :contacted, -> { joins(:logs).where("logs.key = ?", "contacted").uniq }
scope :never_contacted, -> { (all - contacted) }
但我也怀疑这样的做法是非常低效的。
是否有可能查询没有与“contacts”关联的日志作为关键属性的用户?
此查询不会只返回没有日志的用户吗?那些除了“联系”之外还有其他日志的用户呢? – Epigene
只需在WHERE中添加一个额外的OR条件。 –