Отношения ActiveRecord, когда модель имеет как одну, так и множество одинаковых моделей - PullRequest
0 голосов
/ 20 июля 2010

Мои данные похожи на это:

class Team < ActiveRecord::Base
  has_many :persons
  has_one :leader
end

class Person < ActiveRecord::Base
  belongs_to :team
end

Человек принадлежит только к одной Команде, но из многих членов команды есть только 1 лидер.

Первый вопрос: должен ли я использовать принадлежащий_ к вместо has_one в модели команды?

Второе: команда создается из множества людей и лидера, известного изначально. Как это сделать?

В настоящее время я делаю что-то подобное в моем контроллере:

  @team = Team.new

  for (each new person as p)

    new_person = @team.persons.build
    new_person.name = p.name

    if p.is_marked_as_leader
      @team.leader = new_person
    end
  end

  @team.save

Это проблема, когда я перечисляю @ team.persons, @ team.leader имеет первый идентификатор, я полагаю, потому что @ team.save сначала сохраняет ассоциацию лидеров. Мне нужно, чтобы они были в том порядке, в котором они предоставляются.

Спасибо!

1 Ответ

0 голосов
/ 20 июля 2010

Я бы проголосовал за «has_one» за лидера, потому что вы человек, который может существовать вне команды, и ее роль в качестве руководителя команды.

Это агрегация против состава обсуждение.

Иногда это открыто для обсуждения, но в этом случае я бы сказал, что отношения между командой и лидером явно сложны.

...