在我提出问题之前,我会给出一些背景信息。
在我的Rails 4应用程序中,我有3个模型。
Clubs has_many Teams.
Teams belong_to Clubs
Clubs has_many Schedules.
Schedules belong_to Clubs.
数据库中团队的相关列:
:win(integer)
:loss(integer)
:tie(integer)
数据库中的计划的相关列:
:team1
:team2
计划对象应该显示2个团队彼此。在计划对象的表单中,我将制作
Club.teams 在2个单独的下拉框中提供,因此用户可以选择:team1
和:team2
。
创建Schedule对象后,我想制作一个切换框,您可以稍后点击该状态以说明哪支球队赢得了比赛。
计划对象div的示例设置:
Team 1 |(Box1)|(Box2)|(Box3)| Team 2
如果单击Box1,那将意味着Team 1赢了,我将自动调整团队表中的赢/输/领带列(增加:团队1赢1,增加:团队2损失1) )。 Box2表示领带,Box2表示Team 2获胜。这将由ajax完成。
最后,对于我的问题,如何将Schedule对象中的:team1
和:team2
列与Teams表中相应的Team对象相关联,以便使用切换框操纵其列?< / p>
答案 0 :(得分:4)
在这里,您需要创建一个引用相同模型的连接表,在您的情况下是团队
create_table "team_matches" do |t|
t.integer "team_a_id", :null => false
t.integer "team_b_id", :null => false
t.integer "win_or_lose"
end
在TeamMatch模型中你会做类似的事情
class TeamMatch < ActiveRecord::Base
belongs_to :team_a, :class_name => :Team
belongs_to :team_b, :class_name => :Team
end
并在团队模型中
class Team < ActiveRecord::Base
has_many :team_matches, :foreign_key => :post_a_id, :dependent => :destroy
has_many(:reverse_team_matches, :class_name => :TeamMatch,
:foreign_key => :team_b_id, :dependent => :destroy)
has_many :teams, :through => :team_matches, :source => :post_b
end
你很高兴,创建两个团队并做类似的事情,看看它是否适用于你的控制台
team1 = Team.create(...) #whatever your attributes put them in the create function
team2 = Team.create(...) #whatever your attributes put them in the create function
team1.teams << team2
team1.team_matches #Here the record the joins team1 and team2 will appear, along with win_or_lose_attribute
team1.team_matches.first.update(win_or_lose: 1) #or whatever value you want to specify win, tie or lose