Связи RoR насквозь или нет? - PullRequest
0 голосов
/ 08 апреля 2010

У меня есть четыре модели, которые связаны друг с другом, в настоящий момент я настраиваю их так, что при входе в новый город мне нужно выбрать округ, регион и страну.лучше использовать символ :through в ассоциации?Таким образом, я мог бы сказать город:

has_one :country, :through => :region

Не уверен, что это правильно, я прочитал как: работает, но я не уверен, что это лучшее решение.Я новичок, и хотя я не борюсь с синтаксисом и тем, как все работает, было бы неплохо узнать мнение о лучших методах и способах, которыми следует действовать от некоторых волшебников rails!

Ответы [ 2 ]

1 голос
/ 08 апреля 2010

Я думаю, это во многом зависит от того, как вы планируете ссылаться на каждую модель.В вашей настройке (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 загружает родственников модели лениво , то есть если вы ссылаетесь на родственника модели, он загружаетсячерез собственный SQL-запрос.

1 голос
/ 08 апреля 2010

Вам нужно это сделать? Не могли бы вы просто иметь

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
...