我尝试使用rails构建一个足球经理游戏,并且我坚持使用rails协会。
team table
...
history table
team_id
saison_id
saison table
league_id
league table
...
我想找到一个联盟的所有球队。
class History < ActiveRecord::Base
belongs_to :saison
belongs_to :team
end
class Saison < ActiveRecord::Base
has_many :histories
has_many :teams, :through => :histories
belongs_to :league
end
class League < ActiveRecord::Base
has_many :saisons
end
class Team < ActiveRecord::Bases
has_many :histories
has_many :saisons, :through => :histories
end
我想做一些事情(在联盟控制器的show方法中):
@team = Team.find(:all, :include => [:saisons => :histories, :leagues => :saisons],
:conditions => ["leagues.id = ?", params[:id]])
但它不起作用。
SQL查询:
SELECT Team.*
FROM Team, Saison, History, League
WHERE History.Team_ID = Team.ID AND
History.Saison_ID = Saison.ID AND
Saison.League_ID = League.ID
这个查询返回所有团队的一个saison ...但我没有达到让它适用于联盟
@division = Team.find(:all, :include => [:saisons => :histories],
:conditions =>["saisons.id =?",params[:id]])
答案 0 :(得分:1)
如果您使用其他语言命名表格和模型,那么您更有可能不遵循Rails的命名惯例(但也可能发生在英语中!)。
无论如何,如果某个单词的复数不以S结尾,则必须转到位于inflections.rb
的文件your_app/config/initializers
并在其中添加复数的某些单词。这只是一个例子:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'merchandise', 'merchandising'
end
至于你的具体问题,我不确定我是否理解,但你想要一个赛季的所有球队?这很简单,只是:
@saison_teams = saison.teams
那么你想要一个部门的所有团队,但你没有告诉我们什么是分部!
答案 1 :(得分:0)
我不确定你是如何达到这一点的,但你的命名约定对于Rails应用程序是错误的。
让我们看一下历史。
你的模型应该被称为“历史”
app / models / history.rb的第一行是:
class History < ActiveRecord::Base
数据库中生成的表应称为“历史记录”。
然后,当您设置关联时,您需要注意多元化。
has_many
后面跟着一个复数词
belongs_to
后面跟着一个单数词。
Saison协会应如下所示:
class Saison < ActiveRecord::Base
has_many :histories
has_many :teams, :through => :histories
belongs_to :league
end
希望这有帮助。
答案 2 :(得分:0)
在联盟控制器中,在show方法中,我尝试了类似
的东西 @team = Equipe.find(:all, :include => [:saisons => :history],
:conditions =>["saisons.league_id =?",params[:id]])
我会在find语句中包含联盟,以便在同一结果选项卡中包含其所有属性(例如名称)。
我知道我可以在另一个查询中获得有关联盟的信息,但这不是最佳方式。