如何正确地将模型与2个不同的对象相关联?(Rails 4)

时间:2016-04-10 07:53:58

标签: jquery ruby-on-rails ajax

在我提出问题之前,我会给出一些背景信息。

在我的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>

1 个答案:

答案 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