如何描述这个Ruby on Rails关系

时间:2014-02-12 18:32:47

标签: ruby-on-rails ruby ruby-on-rails-4

我的Rails应用程序中有两个类。其中一个是Athlete,另一个是AthleteGameLog。这种关系的有趣部分是多年来一个has_many运动员的AthleteGameLog个实例。然而,在当前季节的背景下,Athlete每年应该只有一个游戏日志。因此,一个用于2013,一个用于2014等等。

使用Ruby on Rails时,has_many关系仍然是正确的方法吗?我是否必须编写scope才能检索我正在寻找所有AthleteGameLog个实例的特定年份的正确关系?

4 个答案:

答案 0 :(得分:2)

has_many关系听起来很不错。您可能希望添加一个只允许每AthleteGameLogAthleteAthlete.game_log_for_year(2013)的验证,这不会太难。

如果您选择将一年作为输入并返回正确的游戏日志,则可以编写范围。就像是。

例如

{{1}}将返回正确的游戏日志。

答案 1 :(得分:1)

是的,它确实仍然具有很多关系。您可以编写参数化范围以检索正确的日志:

class AthleteGameLog < ActiveRecord::Base
  scope :for_year, ->(year) { find_by(year: year) }
end

athlete.game_logs.for_year(2014)

对于那些对范围没有返回关联代理不满意的人:

class AthleteGameLog < ActiveRecord::Base
  def self.for_year(year)
    scoped.find_by(year: year)
  end
end

答案 2 :(得分:0)

怎么样:

class Athlete < ActiveRecord::Base
  # columns: id, <athlete columns>
  has_many :athlete_game_logs
end

class AthleteGameLog < ActiveRecord::Base
  # columns: id, <gamelog columns>, year
  belongs_to :athlete
  validates :athlete_id, :uniqueness => { scope: :year }
end

答案 3 :(得分:-1)

值得在Athle_id和year上添加一些独特的索引或唯一约束。