Ruby On Rails Relationship - один ко многим - PullRequest
0 голосов
/ 11 мая 2009

Я начинаю ROR, но вот чего я пытаюсь достичь. У меня есть две вещи, которые я хочу связать: вопросы и люди. Каждое дело может иметь много людей. То есть я хочу создавать людей и вопросы отдельно, а потом иметь возможность связывать их.

Например, я могу создать: Билл Клинтон Барак Обама

Я могу создать вопросы: Глобальное потепление Война с террором

Я хочу иметь возможность связать пользователей Билла Клинтона и Барака Обамы с ОБАМИ вопросами. Может кто-нибудь указать мне учебник, который может показать мне, как это сделать?

Ответы [ 3 ]

4 голосов
/ 11 мая 2009

Я думаю, что has_and_belongs_to_many используется сообществом RoR все реже и реже. Хотя все еще поддерживается, я думаю, что теперь более распространено иметь промежуточную модель (в вашем случае что-то вроде PoliticianMatter), чтобы присоединиться к вашим Politician и Matter моделям.

Тогда у вашего politician_matter стола будет PK, politician_id и matter_id.

Тогда у вас есть

class PoliticanMatter < ActiveRecord::Base
  belongs_to :politician
  belongs_to :matter
end

Преимущество этого подхода состоит в том, что если когда-либо понадобятся будущие свойства отношения политик -> материя (например, важность, дата последнего появления), то у вас есть модель, которая дает это - has_and_belongs_to_many не будет поддерживать добавление из этих дополнительных свойств.

Вы также можете получить доступ ко многим ко многим прямо из моделей Политик и Материя, как это

class Politician < ActiveRecord::Base
  has_many :politician_matters
  has_many :matters, :through => :politician_matters
end

class Matter < ActiveRecord::Base
  has_many :politician_matters
  has_many :politicians, :through => :politician_matters
end
2 голосов
/ 11 мая 2009

Вам нужно много-много отношений между этими двумя сущностями.

  • Вопрос может изучаться многими людьми
  • Человек может изучить несколько вопросов

Rails использует для этого хелпер has_and_belongs_to_many. Вы найдете больше об этом в документации и многих других сообщениях в блоге!

has_and_belongs_to_many helper

0 голосов
/ 11 мая 2009
class Politician < ActiveRecord::Base
  has_and_belongs_to_many :tasks
end

class Task < ActiveRecord::Base
  has_and_belongs_to_many :politicians
end

Вам нужны 3 таблицы: politicians, tasks и politicians_tasks (с двумя столбцами politician_id и task_id, без первичного ключа)

Надеюсь, это поможет Себ

...