2012-01-15 48 views
0

我有三種模型:RaceCards,Races和Wagers。如何將動態條件應用於Rails 3 has_many:通過關聯

class RaceCard < ActiveRecord::Base 
has_many :races 
has_many :wagers 
end 

class Race < ActiveRecord::Base 
belongs_to :race_card 
has_many :wagers, :through => :race_card 
end 

class Wager < ActiveRecord::Base 
belongs_to :race_card 
has_many :races, :through => :race_card 
end 

rails g model RaceCard race_card_date:date number_of_race:integer 

rails g model Race race_card_id:integer race_nbr:integer 

rails g model Wager race_nbr:integer race_card_id:integer wager_type:string payoff:integer 

所以,如果我這樣做控制檯:

Wager.first.races #All races on the race card are returned. Good! 

但我想確定返回什麼種族的一種方式,所以我加一個條件:

if I add this: :condition =>{:race_nbr => 1} 

Wager.first.races #Return just race 1, but this is static (always set to 1) 

我的問題是如何我是否將條件設置爲下注模式中的race_nbr:

:condition => {:race_nbr => wager.race_nbr} #throws an error 
:condition => {:race_nbr => self.race_nbr} #throws an error 

我已經嘗試了很多其他的東西,只是似乎無法得到它。任何指導將不勝感激。提前致謝。

更新:我現在已經試過下面

:condition => "wagers.race_nbr = races.race_nbr" #unfortunately this yields the following: 

SQL error or missing database (no such column wagers.race_nbr) 

回答

1

由PinnyM建議的解決方案可以做到這一點使用範圍:

def Race < ActiveRecord::Base 
    scope :for_race_nbr, lambda { |race_nbr| where(:race_nbr => race_nbr) } 
end 

def Wager < ActiveRecord::Base 
    def races_for_race_nbr 
    races.for_race_nbr(race_nbr) 
    end 
end 
+0

我希望把狀態協會內。請問這樣的工作::condition => {wager_nbr => races.race_nbr} – Mutuelinvestor 2012-01-15 03:53:18

+0

差不多,請參閱上面編輯的答案 – PinnyM 2012-01-15 04:02:36

+0

我認爲我們有它,但是當我在控制檯嘗試時,我得到以下內容:下注負載(0.0ms)選擇「下注」*從「下注」下注「下注」「下注」= 1極限1 比賽負荷(2.0ms)選擇「比賽」*從「比賽」內部加入「比賽卡」 SQL_ERROR:[SQLITE_ERROR] SQL錯誤或缺少數據庫(沒有這樣的列:下注:下劃線):「race_card_id」=「race_cards」。「id」WHERE「race_cards」。「id」= 1 AND(races.race_nbr = wagers.race_nbr) ActiveRecord :: JDBCError: .race_nbr)。它看起來像我需要得到Wager添加到聯接。 – Mutuelinvestor 2012-01-15 04:34:35