有哪些技术可以更好地分解rails关联? (给出的具体例子)

时间:2012-11-05 23:05:57

标签: ruby-on-rails ruby associations

谢谢你看看!

我正在阅读Depot书籍和rails教程之后构建我的第一个“on my own”应用程序,并在两者之间进行工作。我发现很难让我的协会得以解决,因为在我目前的实践项目中有很多这样的协会。这是概述,它基本上是一个简单的NFL pickem应用程序:

“用户”登录(设计)并查看本周的“游戏”列表。 (比方说NFL比赛) “用户”可以通过提到的第一个屏幕为这些游戏制作“精选”,并在一周内提交 “游戏”有2个团队与之相关联 “游戏”有一个“结果”(在这里有一个结果模型或仅使用游戏表中的结果列)。 “周”中有几个“游戏”,它们被挑选出来。

在选秀结束后,他们可以看到所有人都选择了,但这在这里并不重要。

因此,正如您可以看到的那样,我需要指定几种关系,而且我很难将它们全部用完。另外我发现自己想要为每个人制作脚手架(我知道对吗?)但我不认为这是正确的答案。

此外,一旦得到解决,是否有良好的秩序与他们一起服用?就像在这种情况下我认为从“团队”开始是一个好主意,所以我可以在这几周中添加“周”和“游戏”。但我猜我真的迷失了,不知所措。有关如何开始解决此问题的任何提示?非常感谢大家的帮助!

(如果你想查看代码,请告诉我,但我认为这更像是一个过程/基本问题,而不是“给我解决我的具体问题”的问题。再次感谢。

1 个答案:

答案 0 :(得分:1)

将所有不同的物体分开,然后问问自己各自的相关性通常很方便。你已经用上面所说的完成了所有这些,所以这只是将其转换为代码:

  • 用户可以选择意味着用户has_many选择。
  • 游戏的选择意味着挑选belongs_to游戏。
  • 一场比赛有两支球队(让我们说主场和客场比赛)所以一场比赛belongs_to两个不同的球队。
  • 一周有几场比赛,所以一周has_many场比赛。

由于结果可以是关系或列,这意味着游戏has_one结果。

然后你只需要反转其他模型的关联。一端has_one表示另一端belongs_to。一端belongs_to表示另一端为has_manyhas_one

关键是要真正理解3个不同的关联 - belongs_tohas_manyhas_one - 以及它们如何翻译成英语。

结果将是这样的:

class User < ActiveRecord::Base
  has_many :picks
end

class Pick < ActiveRecord::Base
  belongs_to :user
  belongs_to :game
end

class Game < ActiveRecord::Base
  has_many :picks
  belongs_to :home_team, :class_name => "Team"
  belongs_to :away_team, :class_name => "Team"
  belongs_to :week
  has_one :result
end

class Week < ActiveRecord::Base
  has_many :games
end

class Team < ActiveRecord::Base
  has_many :home_games, :class_name => "Game"
  has_many :away_games, :class_name => "Game"
end

class Result < ActiveRecord::Base
  belongs_to :game
end

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html