将记录添加到has_and_belongs_to_many关系中

时间:2015-11-30 15:38:53

标签: ruby-on-rails ruby activerecord has-and-belongs-to-many

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

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

所以问题是:其中如何编写一个方法,该方法会向Gambler添加投注,并将每个投注存储为{{1} } {和bet_idgambler_bet_id表中?

1 个答案:

答案 0 :(得分:0)

如果你想实施HABTM,我认为你需要Gambler和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

这将是您使用表名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之间存在多对多关系,那么上面的关系会更好。