2015-12-01 36 views
1

我有一個類Team有很多Matchups使用包括在軌

class Team < ActiveRecord::Base 
    has_many(
    :home_matchups, 
    class_name: "Matchup", 
    foreign_key: :team_1_id, 
    primary_key: :id 
) 

    has_many(
    :away_matchups, 
    class_name: "Matchup", 
    foreign_key: :team_2_id, 
    primary_key: :id 
) 

    def matchups 
    Matchup.where("team_1_id = ? OR team_2_id = ?", id, id) 
    end 
end 

class Matchup < ActiveRecord::Base 
    validates :team_1_id, :team_2_id, :week, presence: true 

    belongs_to(
    :team_1, 
    class_name: "Team", 
    foreign_key: :team_1_id, 
    primary_key: :id 
) 

    belongs_to(
    :team_2, 
    class_name: "Team", 
    foreign_key: :team_2_id, 
    primary_key: :id 
) 

    has_one :league, through: :team_1, source: :league 
end 

這一切工作正常的自定義關聯,直到我想用includes這樣的:Team.includes(:matchups)因爲雖然比賽返回一個活躍的記錄關係,我不能使用它。之後會出現這個問題,因爲我需要爲很多團隊提供這種信息,而且我不想爲每個團隊進行查詢。任何人都可以告訴我如何使用包含獲得組合?

+0

你並不需要都在這裏:'Team.includes(:對決)' –

+0

謝謝,我已經編輯它來反映這一點。 –

+0

爲什麼不使用'Team.includes(:home_matchups,:away_matchups)'然後合併到一起? –

回答

2

像肖恩·胡貝爾說,包括主客場對決,屆時提及他們.matchups

def matchups 
    (home_matchups + away_matchups).sort_by(&:week) 
end 

這是一個有點慢(也許),但你會得到保證使用的關係,如果是裝。

這裏的一般方法 - 包括關係,就像您,然後用它指的是那些關係方便的方法 - 無論是在一個視圖或類似這樣的例子另一個模型方法。

+0

非常感謝,我認爲這正是我所需要的。從我所看到的情況來看,當我對包含客場和主場比賽的關係進行比賽時,這不會查詢數據庫,這是否正確? –

+0

是的,沒錯。它將檢查該關聯是否被加載,而不是重試查詢 – Swards