Rails belongs_to class_name与正确的外键?

时间:2011-02-07 22:06:44

标签: ruby-on-rails database associations

我有一个灯具和一个团队数据库来展示足球场。 我现在可以查看所有灯具(索引和展示..)和所有团队(仅限索引)。

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

尝试在'team#show'页面

上显示团队装置时出现以下错误
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因为每个灯具总是包含两个团队而不存在,所以我如何建立一个发现以显示一个单独的团队灯具?

1 个答案:

答案 0 :(得分:0)

我希望有一种很好的方法可以做到这一点,但确实没有。可能最好的解决方法是:

  1. 要有两个has_many s,:home_fixtures:away_fixtures,然后是方法fixtures,它返回两者的并集(有关更多信息,请参阅this question详情)。
  2. 要完全跳过has_many,只需编写一个方法fixtures即可为您提供所需内容而无需实际设置ActiveRecord关系。
  3. 像这样(Rails 2.3-Style):

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

    希望这有帮助!