我正在尝试为我正在进行的一个小项目组建几个模型关联。我是Rails的新手,所以这对我来说有点混乱。
我的用例很简单。我有一个运动联盟,有很多 分区。每个部门 都有许多 团队。每个团队 都有一个 队长,有很多 玩家。
现在,玩家和队长都由班级用户代表。区别他们的唯一因素是他们的角色。我正在使用 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.
非常感谢任何帮助。
答案 0 :(得分:0)
这个定义对我来说似乎没问题。还有其他方法(当然),但这个似乎没问题。
这取决于您的用户界面。船长应该足够简单 - 执行collection_select
并将其分配给captain
属性。
玩家有点棘手。通常的做法是(正如你所做的)将collection_select
与html数组name
(例如team[player_id][]
)一起使用,在你的情况下,我想你每个团队都有一定数量的玩家所以你只需要多次显示它(如果不是你可以使用javascript为用户克隆它)。