如何在Rails中将现有模型与新模型相关联

我有一个“小费”模型和一个“团队”模型。 我正在尝试创建一个表单,用户将从多个游戏中选择获胜的团队。 到目前为止,用户可以选择获胜团队,并将这些ID保存为Tip模型(team_id)中的foriegn键。 但保存后,我不能去(例如)@ tip.team.name。 我需要做什么 ? 我如何关联它(虽然如果设置了foriegn键,我可以神奇地使用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 

最后一种方法也可能很混乱,但不确定如何做到这一点。 我想在一种forms中创建几个“提示”。

编辑:要明确我很确定这是一对多的关系,我在一个表单中创建了几个提示,但每个提示只涉及一个团队。

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

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

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

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

你真正需要的是使用has_many通过关系来链接提示和团队。 这是因为一个小费可以有很多小组,但也有一个小组可以有许多提示。 您需要创建第三个表来执行此操作,可能名为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找到它的所有团队。 请记住,这将是一个数组,以便让第一个团队使用@tick.teams [0]。 同样,如果您有@team,您可以使用@ team.tips获取有关它的所有提示。

有关如何通过关联设置此has_many的更多信息,请参阅“活动记录关联指南”