我有一个灯具和一个团队数据库来展示足球场。 我现在可以查看所有灯具(索引和展示..)和所有团队(仅限索引)。
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因为每个灯具总是包含两个团队而不存在,所以我如何建立一个发现以显示一个单独的团队灯具?
答案 0 :(得分:0)
我希望有一种很好的方法可以做到这一点,但确实没有。可能最好的解决方法是:
has_many
s,:home_fixtures
和:away_fixtures
,然后是方法fixtures
,它返回两者的并集(有关更多信息,请参阅this question详情)。has_many
,只需编写一个方法fixtures
即可为您提供所需内容而无需实际设置ActiveRecord关系。像这样(Rails 2.3-Style):
def fixtures
return Fixture.all(:conditions => ['away_id = :id OR home_id = :id', {:id => self.id}])
end
希望这有帮助!