【问题标题】:3 column association table? Modeling users betting on other users through matches3列关联表?通过比赛对其他用户下注的用户建模
【发布时间】:2014-02-10 17:05:48
【问题描述】:

我想为我的应用实现一个投注系统,用户可以在其中投注一名球员赢得与另一名球员的比赛。

这是一个示例场景:

匹配 1 包含用户 2 与用户 3。

用户 1 想“赌”在用户 2 上获胜。

因此,为了唯一标识一个投注,我们必须拥有 3 条信息。

1) 更好的 id(用户 1)

2) 比赛ID(比赛1)

3) 被投注的玩家(用户 2)

因此,作为一名新手 Rails 开发人员,我只开发了只有 2 列的关联表。我的问题是您如何对包含 3 列的关联表“Bets”进行建模?

我想能够说

user.current_bets

显示用户已下注的所有当前投注,这将说明我投注的比赛以及我投注的用户。

另外,在任何给定的比赛中,我希望能够看到所有投注玩家 1 的用户

match.p1_user_bet_list

以及所有下注玩家 2 的用户

match.p2_user_bet_list

任何帮助将不胜感激。

提前致谢!

【问题讨论】:

  • 查看所有投注玩家1的用户def p1_user_bet_list(player_id) where(player_id: player_id) end
  • 抱歉 NitinJ,不确定这有什么帮助。用户和比赛之间的关联以及对另一个用户的投注没有在您的代码中的任何地方制定。
  • 哦,我假设您已经定义了关联。有关关联,请参阅 rails 指南。

标签: ruby-on-rails model ruby-on-rails-4 associations


【解决方案1】:

我认为这应该可以解决问题。

class User < ActiveRecord::Base
  has_many :bets, foreign_key: 'better_id'
  has_many :bet_ons, foreign_key: 'favorite_id'
  has_many :favorites, through: :bets
  has_many :betters, through: :bet_ons
end

class Bets < ActiveRecord::Base
  belongs_to :match
  belongs_to :better, class_name: 'User'
  belongs_to :favorite, class_name: 'User'
end

要调出用户下的所有赌注,您可以使用:

user.bets

要获取所有下注玩家 1 的用户,您可以使用:

player1.betters

请注意,我没有对此进行测试。

更多关于关联的信息在这里:http://guides.rubyonrails.org/association_basics.html

【讨论】:

  • JKen13579,我尝试了您的解决方案并认为它会起作用,但不幸的是问题实际上并没有解决。例如,player1.betters 返回了对你下注的用户列表,问题是我们不知道他们对你下注的比赛。因此,用户 2 可以在比赛 A 和另一场比赛 X 中投注您,但我们无法确定这一点,因为 player1.betters 仅返回未与比赛耦合的用户列表。
  • 你能用@bets_on = user.bet_ons吗?这将为您提供已在user 上下注的列表,如果您使用@bets_on.each do |b| 遍历@bets_on,您可以获得匹配和使用b.match 下注的用户和b.better,分别。
猜你喜欢
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
相关资源
最近更新 更多