我最近一直致力于一个项目,玩家可以创建一个团队并成为团队所有者,但是一个玩家也可以通过一个名为Squad的单独表格成为团队的一部分。
class Player
has_many :teams
has_many :squads
end
class Squad
belongs_to :player
belongs_to :team
end
class Team
belongs_to :owner, :class_name => "Player"
has_many :squads
has_many :players, :through => "squads"
end
我不知道这是否是我需要做的所有事情,但我无法弄明白。如何让玩家通过Squad邀请加入团队,团队的所有者对该玩家回答是或否?如果是的话,他加入了桌上小队,并且是球队的一员。如果不是,他的请求就会被销毁。
答案 0 :(得分:1)
您需要在Squad模型中创建一个布尔字段status
,默认为false。如果您需要更复杂的内容,可以使用this gem。
因此玩家调用小队#create动作,它会创建一个小队模型。 团队#show显示团队的所有者加入来自玩家的请求并使用小队#accept或小队#reject(或#update with status argument)然后将状态更改为true,或者销毁此小队记录。
基本上就是这样
<强>更新强>
这是一个基本的社交网络友情系统的工作方式。
使用state_machine,您可以定义另一个状态rejected
,因此同一个用户在被拒绝后不会向团队所有者发送垃圾邮件请求。通过检查updated_at字段,您可以实现超时,之后同一个人可以重复他的请求。
答案 1 :(得分:0)
看起来您需要了解has_and_belongs_to_many关系。这就是你应该用来将球队与球员,球队和球队联系在一起的球员。
至于邀请,您应该以适当的方式创建一个名为Invitation的模型,该模型与玩家/小队/团队相关联。有关邀请的通知可以在控制器/视图中处理。