我的Rails应用程序中有两个类。其中一个是Athlete
,另一个是AthleteGameLog
。这种关系的有趣部分是多年来一个has_many
运动员的AthleteGameLog
个实例。然而,在当前季节的背景下,Athlete
每年应该只有一个游戏日志。因此,一个用于2013
,一个用于2014
等等。
使用Ruby on Rails时,has_many
关系仍然是正确的方法吗?我是否必须编写scope
才能检索我正在寻找所有AthleteGameLog
个实例的特定年份的正确关系?
答案 0 :(得分:2)
has_many
关系听起来很不错。您可能希望添加一个只允许每AthleteGameLog
每Athlete
个Athlete.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上添加一些独特的索引或唯一约束。