【问题标题】:Question about Association and Models on Rails关于 Rails 上的关联和模型的问题
【发布时间】:2011-05-17 23:26:21
【问题描述】:

我最近一直在从事一个项目,其中玩家可以创建团队并成为团队所有者,但玩家也可以通过名为 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 请求被邀请加入团队,而团队所有者对该玩家回答是或否?如果是,他会加入 Table Squad 并成为团队的一员。如果没有,他的请求就被销毁了。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 associations rails-models


    【解决方案1】:

    您需要在您的 Squad 模型中创建一个布尔字段 status,默认为 false。如果你需要更复杂的东西,你可以使用this gem

    所以玩家调用了一个小队#create 动作,它创建了一个小队模型。 Team#show 显示来自玩家的团队加入请求的所有者并使用squad#accept 或squad#reject(或带有状态参数的#update),然后您将状态更改为true,或销毁此小队记录。

    基本上就是这样

    更新

    这就是基本的社交网络交友系统的运作方式。

    使用 state_machine,您可以定义另一个状态 rejected,因此同一用户不会在被拒绝后向团队所有者发送垃圾邮件。通过检查 updated_at 字段,您可以实现超时,之后同一个人可以重复他的请求。

    【讨论】:

    • 谢谢谢谢 :) 我稍后会试一试,但我认为这会成功。
    • 好吧,让我看看我是否理解:玩家将创建一个Squad,这将有一个空的team_id。 Team Owner 将使用team#show 检查请求,并编辑或删除它们。通过编辑,所有者将team_id 添加到模型中,Squad 将完成。如果这是正确的,我在哪里需要你提到的status?感谢您帮助我做到这一点:)
    • 不,伙计。最初应该设置 team_id。否则,您将无法向团队所有者显示请求,因为您不知道请求了哪个团队。这就是你需要状态的原因。
    【解决方案2】:

    看来您需要了解 has_and_belongs_to_many 关系。这就是您应该用来将球队与球员、球队与球员以及球队与球队联系起来的方法。

    关于邀请,您可能应该创建一个名为 Invitation 的模型,该模型以适当的方式与球员/小队/球队相关联。可以在控制器/视图中处理有关邀请的通知。

    【讨论】:

    • 你说我放关联的方式行不通?而这个邀请模型,会和其他3个模型相连吗?谢谢你的回答:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多