Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 查找所有父项';s Rails 4中一组深度嵌套子对象的父对象_Ruby On Rails_Ruby On Rails 4_Has Many - Fatal编程技术网

Ruby on rails 查找所有父项';s Rails 4中一组深度嵌套子对象的父对象

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 如果有

这听起来可能令人困惑,但很容易解释。假设我有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
如果有更好的方法可以做到这一点,那么是否也有一种方法可以让所有连接的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)