2010-11-11 180 views
0

我正在尝试为我正在处理的一个小项目组合一对模型关联。我是Rails的新手,所以这对我来说有点混乱。Rails 3与has_many,belongs_to和模型关联:通过

我的用例非常简单。我有一个体育联赛其中有很多。每个分区有很多团队。每个团队有一个队长有许多玩家

现在,玩家和上尉都由班级用户代表。唯一区别他们的是他们的角色。我正在使用CanCan来管理角色。

现在,这里是我的模型,以及如何我已经定义的关联:

class Division < ActiveRecord::Base 
    belongs_to :league 
    has_many :teams 
end 

class League < ActiveRecord::Base 
    has_many :divisions 
end 

class Team < ActiveRecord::Base 
    belongs_to :division 
    accepts_nested_attributes_for :division 

    has_one :captain, :class_name => "User" 
    accepts_nested_attributes_for :captain 

    has_many :rosters 
    has_many :players, :through => :rosters, :source => :user 
    accepts_nested_attributes_for :players 

    validates_presence_of :name 
    validates_uniqueness_of :name 
end 

class User < ActiveRecord::Base 
    has_many :authentications 
    has_many :rosters 
    has_many :teams, :through => :rosters 
    belongs_to :team 
end 

And here is my generated Schema file.

  1. 我是否正确定义了模型关联?
  2. 当我创建或编辑团队时,如何为团队分配球员或队长?

任何帮助将不胜感激。

回答

0
  1. 这个定义对我来说似乎还行。还有其他的方式(当然),但这个似乎没问题。

  2. 这种取决于你的用户界面。队长应该很简单 - 执行collection_select并将其分配给captain属性。

玩家有点棘手。通常的做法是(和你一样)使用collection_select和html数组name(例如team[player_id][]),在你的情况下,我想你每个团队都有一定数量的玩家,所以你只需多次显示它(如果不是你可以使用JavaScript来为用户克隆它)。

+0

我有兴趣了解定义这些模型和关联的不同方式。因为说实话,所有这些belongs_to和has_many的东西真的让我困惑。 – Ramin 2010-11-11 23:03:05

+0

例如,您可以不将船长定义为has_one,而是将其作为名册模型的属性。但在这种情况下使用has_one似乎很好。 – 2010-11-12 07:33:21

相关问题