2011-02-07 4 views
0

私はサッカーの備品を示すための備品とチームデータベースを持っています。 私は現在、すべての什器(インデックス& ..)とすべてのチーム(インデックスのみ)を見ることができます。正しい外部キーを持つクラス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" 
    ... 

My Fixture &チームモデルは以下のとおりです。

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を探しているが、それは」doesnの言っていることを理解し、次のエラーを取得各フィクスチャには常に2つのチームが含まれているため、home_idとaway_idがあるので、個々のチームのフィクスチャを表示するにはどうすればよいでしょうか?

答えて

0

私はこれもやっている良い方法がありましたが、本当はありません。おそらく最善の回避策は以下のとおりです。

  1. 2つのhas_many S、:home_fixtures:away_fixturesを持って、その後、両者の和集合を返すメソッドfixturesするには(詳細はthis questionを参照してください)。
  2. has_manyを省略して、実際にActiveRecordリレーションシップを設定せずに必要なものを提供するメソッドfixturesを作成してください。そう(Railsの2.3スタイル)のよう

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

・ホープ、このことができます!

+0

私は最初の方法を理解しているとは思わない、私は2番目の方法を使用してプライベートメソッドエラーがある。私のチームのコントローラでは、私はdef @team = Team.find(params [:id])@ fixtures = fixture.all(:conditions => ['away_id =:id OR home_id =:id'、{:id => @ team.id}])end ...私はself.idを@ team.idに変更して動作させました。 –

+0

@raphael_turtleチームモデルへのメソッドの実装を想定していましたが、そのことを忘れてしまいました。申し訳ありません - とにかく働いてうれしいです! –

関連する問題