2011-02-07 82 views
0

我有一個裝置和一個球隊數據庫來顯示足球比賽。 我目前可以查看所有燈具(索引& show ..)和所有球隊(僅索引)。Rails belongs_to class_name與正確的外鍵?

create_table "fixtures", :force => true do |t| 
    t.integer "home_id" 
    t.integer "away_id" 
    t.date  "date" 
    ... 

    create_table "teams", :force => true do |t| 
    t.string "name" 
    ... 

我的裝置&團隊模型如下;

class Fixture < ActiveRecord::Base 
    belongs_to :home, :class_name => 'Team' 
    belongs_to :away, :class_name => 'Team' 
    ... 
class Team < ActiveRecord::Base 
    has_many :fixtures 
    ... 

我在嘗試顯示在「團隊#秀」一個團隊燈具時,下面的錯誤頁面

Processing by TeamsController#show as HTML 
    Parameters: {"id"=>"3"} 
    Team Load (0.4ms) SELECT "teams".* FROM "teams" WHERE ("teams"."id" = 3) LIMIT 1 
    Fixture Load (0.3ms) SELECT "fixtures".* FROM "fixtures" 
    Fixture Load (0.3ms) SELECT "fixtures".* FROM "fixtures" WHERE ("fixtures".team_id = 3) 
SQLite3::SQLException: no such column: fixtures.team_id: SELECT "fixtures".* FROM "fixtures" WHERE ("fixtures".team_id = 3) 

我理解錯誤是說這是尋找燈具TEAM_ID但沒有按」因爲我有一個home_id和away_id,因爲每個燈具總是包含兩個球隊,所以我如何構建一個查找來顯示單個球隊的燈具?

回答

0

我希望有這樣做的好方法,但實際上沒有。也許是最好的解決方法是:

  1. 有兩個has_many S,:home_fixtures:away_fixtures,然後返回兩者的結合的方法fixtures(見this question有詳細介紹)。
  2. 要完全跳過has_many,只需編寫一個方法fixtures,該方法可以在不實際設置ActiveRecord關係的情況下爲您提供所需的內容。

像這樣(Rails的2.3樣式):

def fixtures 
    return Fixture.all(:conditions => ['away_id = :id OR home_id = :id', {:id => self.id}]) 
end 

希望這有助於!

+0

我不認爲我明白了第一種方式,我使用第二種方法得到了私人方法錯誤。在我的團隊控制器中,我有def show @team = Team.find(params [:id])@fixtures = Fixture.all(:conditions => ['away_id =:id OR home_id =:id',{:id => @ team.id}])end ...我通過將self.id更改爲@ team.id來獲得它的工作 – 2011-02-08 13:50:38

相關問題