当模型具有一个和多个相同模型时的ActiveRecord关系

时间:2010-07-20 16:37:09

标签: ruby-on-rails activerecord belongs-to has-one

我的数据类似于:

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

class Person < ActiveRecord::Base
  belongs_to :team
end

人员只属于一个团队,但在众多团队成员中只有一个团队成员。

第一个问题:我应该在Team模型中使用belongs_to而不是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有第一个id,我假设是因为@ team.save首先保存了leader关联。我需要他们按照提供的顺序。

谢谢!

1 个答案:

答案 0 :(得分:0)

我会为领导者投票'has_one',因为这个人可以在团队之外存在,也可以作为团队领导。

这是aggregation vs composition讨论。

有时这是有争议的,但在这种情况下,我会说团队领导关系显然是合成。