Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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 通过多个级别跟踪关联_Ruby On Rails_Model_Associations_Hierarchy - Fatal编程技术网

Ruby on rails 通过多个级别跟踪关联

Ruby on rails 通过多个级别跟踪关联,ruby-on-rails,model,associations,hierarchy,Ruby On Rails,Model,Associations,Hierarchy,我对Rails比较陌生,正在从事一个涉及多个“嵌套”数据级别的项目。我在进行适当的关联时遇到问题,因此我可以将模型3级别的所有子元素都提高。以下是一个模型示例: class Country < ActiveRecord::Base has_many :states end class State < ActiveRecord::Base belongs_to :country has_many :cities end class City < ActiveRec

我对Rails比较陌生,正在从事一个涉及多个“嵌套”数据级别的项目。我在进行适当的关联时遇到问题,因此我可以将模型3级别的所有子元素都提高。以下是一个模型示例:

class Country < ActiveRecord::Base
  has_many :states
end

class State < ActiveRecord::Base
  belongs_to :country
  has_many :cities
end

class City < ActiveRecord::Base
  belongs_to :state
  has_many :people
end

class Person < ActiveRecord::Base
  belongs_to :city
end
class Country
我已经在
国家
模型中实现了一种关系,
有许多:城市,:通过=>:州
,并尝试调用
国家。第一。城市。所有
,这是有效的。但是,当我尝试在
人员
控制器中访问country.first.cities.all.people.all
时,访问给定国家/地区的所有人员时遇到问题

处理这种关联情况的最佳方法是什么?我是否应该为每个子表添加外键,例如
country\u id
,以便获取
国家的所有
人员
?如有任何建议,将不胜感激。

非常感谢

Country.first.cities.all
是一个城市的集合,它没有人的方法

你应该和我一起去

Country.first.cities.all.each do |city|
    city.people
end

原因是Country.first.cities.all是一个数组,它的每个元素都有人的方法,而不是整个城市集合。您会注意到这是有效的:

Country.first.cities.first.people.all
因为第一个国家的第一个城市有人民方法。要获取一个国家所有人的列表,您可以在一个查询中执行以下操作:

People.joins(:city => {:state => :country})
  .where(:country => {:id => Country.first.id}).all

您可以使用命名的_范围或范围(在Rails 3中)。也有一个很好的railscast!。这个答案可能很古老,但它帮助我了解了(3和4)嵌套联接的工作原理,我尝试反向操作,当然,如果不起作用的话。现在更容易理解了!谢谢