0

我有一个“小费”模型和一个“团队”模型。我正在尝试创建一个表单,用户将在其中从几场比赛中选择获胜的球队。到目前为止,用户可以选择获胜的团队,并且这些 id 被保存为 Tip 模型 (team_id) 中的外键。但是保存后,我不能去(例如)@tip.team.name。我需要做什么 ?我如何关联它(我虽然如果设置了外键,rails 可能会神奇地做到这一点),我对 rails 很陌生。谢谢你的帮助 !

class Tip < ActiveRecord::Base
attr_accessible :user_id, :team_id, :team, :game_id, :game, :comp, :comp_id
belongs_to   :game
belongs_to   :comp
belongs_to   :team
end

class Team < ActiveRecord::Base
attr_accessible :name
has_many   :tips
end

def create
params['game'][0].each do |key, value|
    @tip = Tip.new
    @tip.team_id = value
    @tip.game_id = key
    @tip.save
end

最后一种方法也可能很混乱,但不知道该怎么做。我想以一种形式创建几个“提示”。

编辑:要明确的是,我很确定这是一对多的关系,我正在以一种形式创建多个提示,但每个提示仅与一个团队有关。

编辑:实际上我的方法(我确信这不是最好的方法,确实允许tip.team.name。这是一个与我的测试数据相关的愚蠢错误,让我不这么认为。

4

2 回答 2

2

您真正需要的是使用 has_many through 关系来链接提示和团队。这是因为一个小费可以有多个团队,但一个团队也可以有多个小费。您将需要创建第三个表来执行此操作,可能名为 TeamsTips。以下是您可以设置的方法:

class Tip < ActiveRecord::Base
  has_many :teams_tip
  has_many :teams, :through => :teams_tip
end

class TeamsTip < ActiveRecord::Base
  belongs_to: teams
  belongs_to: tips
end

class Team < ActiveRecord::Base
  has_many :teams_tip
  has_many :tips, :through => :teams_tip
end

现在,当您拥有 @tip 时,您可以使用 @tip.teams 找到所有团队。请记住,这将是一个数组,因此要让第一支队伍使用@tip.teams[0]。同样,如果你有一个@team,你可以通过@team.tips 获得它的所有提示。

有关如何通过关联设置此 has_many 的更多信息,请参阅Active Record 关联指南

于 2012-10-07T04:06:57.273 回答
1

如果您的关联是“提示属于一个团队”和“团队可以有很多提示”,那么您在问题中定义的关联是正确的。

如果您想在创建团队时创建多个提示或为已创建的团队添加/编辑/删除提示,请查看“accepts_nested_attributes_for”和https://github.com/ryanb/nested_form

如果您可以使用“@team.name”获取团队名称,那么您应该使用“@tip.team.name”获取它

于 2012-10-07T05:17:24.990 回答