我计划编写一个作用域(scope),它返回所有没有特定关联的记录。
foo.rb
class Foo < ActiveRecord::Base
has_many :bars
end
bar.rb
class Bar < ActiveRecord::Base
belongs_to :foo
end
我想要一个作用域(scope),可以找到所有没有任何bars
的Foo
。使用joins
可以轻松找到有关联的,但我还没有找到相反的方法。
.pluck(:foo_id)
而不是.select(:foo_id)
。你的方法对我无效,因为在模型上调用.select
会返回一个ActiveRecord_Relation
而不是一个数组中的id
,这就是你想要的Model.where.not(id: [1, 2, ...]
语句所需要的吗? - Bryan Dimas.select
返回一个ActiveRecord关系,但.pluck
返回一个Ruby数组。但是当作为.select
的子查询添加时,由于Rails自动将其与其他查询组合,因此您只需调用一次DB。使用.pluck
会调用两次DB。此外,请记住,作用域通常链接在一起,因此不建议使用.pluck
。 - davegsonuniq
被移除并采用distinct
代替,因此不再覆盖Ruby的本地uniq
功能。 - Andrew France