2014-02-12 29 views
3

我的Rails應用程序中有兩個類。其中一個是Athlete,另一個是AthleteGameLog。這種關係中有趣的部分是在多年的運動員has_manyAthleteGameLog的實例。然而,在本季的情況下,Athlete應該每年只有一個遊戲日誌。因此,一個用於2013,一個用於2014等。如何描述這個Ruby on Rails關係

在使用Ruby on Rails時,has_many關係仍然是正確的方法嗎?我是否必須編寫scope以檢索我正在尋找所有AthleteGameLog實例的特定年份的正確關係?

+0

*運動員獲得新日誌時並不真正相關。 –

回答

2

A has_many關係聽起來很好。您可能想要添加一個驗證,每個Athlete每年只允許一個AthleteGameLog,這不會太難。

如果您選擇將一年作爲輸入並返回正確的遊戲日誌,則可以編寫範圍。就像是。

Athlete.game_log_for_year(2013)例如哪個會返回正確的遊戲日誌。

1

是的,它肯定還有has_many關係。您可以編寫參數化的範圍,以獲取正確的日誌:

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 
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 
-1

這是值得添加一些獨特索引或運動員ID和年份的唯一約束。