Ruby on rails 查找所有父项';s Rails 4中一组深度嵌套子对象的父对象
这听起来可能令人困惑,但很容易解释。假设我有3个嵌套很深的模型:Ruby on rails 查找所有父项';s Rails 4中一组深度嵌套子对象的父对象,ruby-on-rails,ruby-on-rails-4,has-many,Ruby On Rails,Ruby On Rails 4,Has Many,这听起来可能令人困惑,但很容易解释。假设我有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 如果有
//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
如果有更好的方法可以做到这一点,那么是否也有一种方法可以让所有连接的FOO的家长都参与进来?这样我就有了一组连接到@goos
中对象的所有boo
希望这个问题不是太奇怪,但我不确定是否有技术术语 的工作原理如下:
#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)
#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)