我有四个相互关联的模型,我现在设置的方式是我必须在进入新城市时选择一个县,地区和国家。
class Country < ActiveRecord::Base
has_many :regions
has_many :counties
has_many :cities
end
class Region < ActiveRecord::Base
has_one :country
has_many :counties
has_many :cities
end
class County < ActiveRecord::Base
has_one :country
has_one :region
has_many :cities
end
class City < ActiveRecord::Base
has_one :country
has_one :region
has_one :county
end
在关联中使用:through
符号会更好吗?所以我可以说这个城市:
has_one :country, :through => :region
不确定这是否正确,我已经读过:通过工作,但我不确定这是否是最好的解决方案。
我是一个新手,虽然我没有在语法和工作方式上苦苦挣扎,但最好从最佳实践中获得意见以及从某些铁路巫师那里做事情的方式会很好!
提前致谢。
答案 0 :(得分:1)
你需要这样做吗?你能不能只有
class Country < ActiveRecord::Base
has_many :regions
end
class Region < ActiveRecord::Base
belongs_to :country
has_many :counties
end
class County < ActiveRecord::Base
belongs_to :region
has_many :cities
end
class City < ActiveRecord::Base
belongs_to :county
end
然后,如果你想找到你要做的城市的国家
my_city = City.last
my_country = my_city.county.reguion.country
答案 1 :(得分:1)
我认为这在很大程度上取决于您计划如何引用每个模型。在您拥有的设置(has_many
/ belongs_to
)中,您可以像这样引用每个模型:
city = City.find("Los Angeles, CA")
city.country # US
city.county # Los Angeles County
city.region # CA
在has_many => through
关系中,您被迫通过through
引用访问模型的亲属,正如他在帖子中提到的那样。
city.region.county.country # US
还要记住Rails loads model relatives lazily,这意味着如果你引用一个模型的亲戚,它就是通过它自己的SQL查询加载的。