这听起来可能令人困惑,但是很容易解释。假设我有3个深层嵌套的模型:
//boo.rb
class Boo < ActiveRecord::Base
has_many :foos
end
//foo.rb
class Foo < ActiveRecord::Base
belongs_to :boo
has_many :goos
end
//goo.rb
class Foo < ActiveRecord::Base
belongs_to :foo
end
现在,如果我有一组Goos @goos
,是否有可能以一种精简的方式获得所有连接的Foos?我正在使用此atm,但它不是很精简,因为我仅在第一步中获得ID,而不是对象本身:
@goos.pluck(:foo_id)
而且,如果有更好的方法可以做到,那么还有没有办法让所有联系的Foos的父母呢?这样我就可以将所有Boos中的一组连接到中的对象@goos
?
希望这个问题不是很奇怪,但是我不确定是否有技术术语!
像这样工作:
#Get all Foos
@foos = @goos.map(&:foo).compact.uniq
#Get all Boos
@boos = @goos.map(&:foo).map(&:boo).compact.uniq
虽然它不是真正伟大的事业它返回一个数组,而不是一个有效记录的关系,这意味着我不能打电话where
,并order
在其上。
编辑:
如果出于某种原因保留活动记录关系类很重要,那么这是更好的方法:
#Get all Foos
@foos = Foo.where(id: @goos.map(&:foo.id).uniq)
#Get all Boos
@boos = Boo.where(id: @goos.map(&:foo).map(&:boo_id).uniq)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句