Я читал руководство по ассоциациям, но я чувствую, что все еще не полностью понимаю, поэтому я хочу задать пару вопросов, чтобы быть уверенными. Предположим, я создаю приложение, которое, среди прочего, перечислит крупные города по всему миру. Я планировал бы иметь представление, которое начинается на уровне континента и может быть отфильтровано. Поэтому я бы начал с модели Continent. А затем модель страны. Теперь, в рамках модели Continent, я бы определил ассоциацию как has_many: страны. И в модели страны я бы использовал belongs_to: континенты. Я так понимаю. Поэтому моя следующая модель будет моделью для штатов/провинций. Давайте просто назовем это провинцией, поскольку это более распространено во всем мире. Итак, теперь у меня есть моя провинциальная модель, и я бы использовал принадлежность к стране. А также у стран было бы много: провинций. Мой первый вопрос: как я описываю связь между провинцией и континентом? Has_many через описывает ассоциации, в которых у обеих моделей много. В провинции только один Континент. Has_one through описывает взаимосвязь между объектами, которые имеют отношение один к одному через третий объект. Опять же, это не так, потому что на континенте будет много провинций. Итак, это мой основной вопрос ... как описывать отношения, которые существуют в контексте от одного до многих через контекст. Мой второй вопрос будет просто просить советы по написанию миграции для этого в ситуации, когда я добавляю еще один слой, скажем, графство, позже. Но главная проблема - просто понять, как выразить отношения, которые я описал. Или если они даже должны быть выражены.has_many/принадлежит к ассоциациям в RoR
ETA: Если бы мне пришлось использовать ассоциацию has_many_through, мне обязательно нужно создать таблицу соединений (continent_province), или я могу просто использовать таблицу стран, т.е. has_many: provinces -> through: countries?
Многое зависит от того, как вы хотите использовать данные. Вам не нужно определять прямую связь между континентом и провинцией, если вам не нужна эта прямая связь. В таком случае, да, вы можете сделать 'has_many_through'. Он будет ассоциировать многие провинции с каждым континентом. – lurker
Спасибо за ответ. Меня беспокоит ассоциация has_many_through по двум причинам. Во-первых, он определяется как от многих до многих, а не от нескольких. Во-вторых, если бы я использовал has_many_through, мне нужно было бы создать таблицу соединений и использовать таблицу соединений в качестве таблицы «через»? Казалось бы, имеет смысл использовать «Страны» в качестве «сквозной» таблицы, но это не является целью таблицы стран. Или я просто передумал это? Это было известно. –
Вы читали http://guides.rubyonrails.org/association_basics.html? – lurker