【问题标题】:Creating a Whatsapp like model in Rails Framework.在 Rails 框架中创建类似 Whatsapp 的模型。
【发布时间】:2017-02-12 10:45:25
【问题描述】:

背景:我是 Rails 新手,我已经完成了 Michael Hartl Ruby on Rails 教程。 我已经阅读了使用 Rails 5 进行敏捷 Web 开发。 因此,为了练习,我试图设计类似 WhatsApp 的框架,但在创建用户和组模型时遇到了困难。

问题:我尝试了不同的用户和组模型关系,但由于某种原因,每一个都失败了。我尝试了一些路径,所以我将在下面列出它们。我不需要代码,只是 User,Admin,Group,Participants 之间正确的数据库关系。另外我们应该可以通过 UI 添加关系。

  1. 我们有两个表 User 和 Group.Admin belongs_to Group.Group has_many Admins。组 has_many 参与者。 Participant belongs_to group。Participant 是一个新表,包含 user_id 和 group_id。
  2. 我们有三个表 User、Group 和 Admin_Participant。Admin_Participant 表包含 admin_of 列和参与者_of 列,一个 user_id column.admin_of 和参与者_of 将包含 group_ids。
  3. 与 first 类似,但我们有一个不同的 admin 表,其中包含 user_id、group_id、is_admin 的布尔表。
  4. 组是对用户的引用,管理列是布尔值。参与者被添加到用户表中,也是一个布尔值。

还有一件事一旦用户创建了组,他就会被分配为该组的管理员。记住参与者的限制。

【问题讨论】:

  • 应该可以只使用三个表:组、用户和参与(user_id、group_id、is_admin)。

标签: mysql ruby-on-rails ruby


【解决方案1】:

3 个表格(及其模型)就足够了。

  1. 用户

    • 有很多参与者
    • 通过参与者有很多组
    • 属性:created_by (user id)
    • 有很多参与者
    • 通过参与者有很多用户
  2. 参与者

    • 属于组
    • 属于用户
    • 属性管理员

如果管理员也是参与者,如果以上应该可以工作。 如果有管理员不是参与者,则需要额外的“参与”或“非参与者”列。

除非管理员有其他属性,否则不需要管理员表。

如果你还没有,最好通过guide

【讨论】:

  • 良好的实施。使用具有 admin 列的另一个参与者表添加有关 admin 的限制要容易得多。用户模型的大小也减小了,为属性腾出了空间。
【解决方案2】:

所以这可能离兔子洞太远了,但我只看到 2 个表,用户和组。用户可以是管理员和/或参与者。用户和组之间的关系可能是 has_or_belongs_to_many,因为一个用户可以属于多个组,一个组可以有多个用户。此外,为了区分用户/管理员/参与者,我什至可以使用 STI(单表继承)对其进行子类化,而不是使用布尔值来确定某人是否是管理员。

【讨论】:

  • 但要为 habtm 关系提供动力,您需要第三张表。
  • 没错,我应该说2个模型。
【解决方案3】:

正如您所指定的,您需要一个关系模型而不是代码。 我想我可以帮忙。 你可能不得不重塑你的整个数据库,但如果我是你,我会这样做......

  1. 用户名、user_id、mob_no、组(在有人需要登录之前,我的应用程序会向他们发送代码,他们可以通过该代码验证他们是该 mob 号的所有者。//我们不会在详细/// )
######## has_many:组
  1. group - name , users , admin(boolean) (我为 admin 做了一个不同的列,users 列存储用户的 user_id ,当有人创建一个组时,他自动成为 admin ,所以 admin 列为此变为 true用户 id .. 之后该管理员也可以设置其他管理员... [如果您在实施此操作时遇到问题,我建议您打开 michael hartl 的书并阅读他如何将示例用户设置为管理员并且该管理员可以删除其他用户,这会有所帮助])
########## belongs_to: 用户
  1. 我不明白您将如何实现组管理员以将用户添加到组, 所以在这种情况下,我想提出以下建议 - $ 如果用户关注了另一个用户,他可以将该用户添加到组中... $ 或类似 facebook 的系统”,用户在该系统中获得用户邀请加入群组,然后由他决定是否加入。

% 请评论并让我知道这是否有帮助。以及任何其他建议。

【讨论】:

  • 请花时间使用正确的格式、标点、大写和语法。 Stack Overflow 是一本在线参考书,这些东西很重要。
猜你喜欢
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多