将记录添加到 has_and_belongs_to_many 关系

Adding records to has_and_belongs_to_many relation

所以我想在这两个模型之间实现多对多关系:

class Bet < ActiveRecord::Base
  belongs_to :betting_event
  has_and_belongs_to_many :gambler_bets
  validates_presence_of :odd, :outcome, :description, :betting_event_id 

end

class GamblerBet < ActiveRecord::Base
  belongs_to :gambler
  has_and_belongs_to_many :bets

end

我写了 运行 迁移:

class CreateBetsGamblerBets < ActiveRecord::Migration
  def change
    create_table :bets_gambler_bets, :id => false do |t|
      t.belongs_to :bet
      t.belongs_to :gambler_bet
    end
  end
end

所以问题是:wherehow 编写一个方法,将赌注添加到 Gambler 并存储他们每个人 bet_idgambler_bet_idbets_gambler_bet table ?

如果你想实现 HABTM,我认为你需要在 Gambler 和 Bet 之间多对多。您需要在 Bet 模型中使用以下内容:

#bet.rb
class Bet < ActiveRecord::Base
    has_and_belongs_to_many :gamblers
end

以及 Gambler 模型中的以下内容:

#gambler.rb
class Gambler < ActiveRecord::Base
    has_and_belongs_to_many :bets
end

这将是您的 table 名称 bets_gamblers

的迁移
class CreateBetsGamblers < ActiveRecord::Migration
  def change
    create_table :bets_gamblers, :id => false do |t|
        t.belongs_to :bets
        t.belongs_to :gamblers
    end
  end
end

查询具有@gambler

实例的赌徒的赌注
@gambler.bets #this would give you all the bets of a gambler

将投注 @bet 插入 @gambler

的投注中
@gambler.bets << @bet

你可以用你的模型做类似的事情GamblerBet,但如果只是为了在 Gambler 和 Bet 之间建立多对多关系,上面的关系会更好。