【问题标题】:User owns a model and other users can join this model用户拥有一个模型,其他用户可以加入这个模型
【发布时间】:2015-09-04 19:10:47
【问题描述】:

我想创建一个用户可以创建房间并且是它的唯一所有者的应用程序。其他用户应该能够加入一个房间,一次只有一个用户,并且只有他们应该能够看到这个房间中发生的事情。

所以我创建了一个控制器 rooms_controller 和模型室。

顺便说一句,我正在使用设计来处理所有用户资料。

那么我应该在 user.rb 文件中添加什么? has_one : 房间?属于:房间? 用户如何加入模型?

【问题讨论】:

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


    【解决方案1】:

    用户是否与 Room 存在一对一的关系?在这种情况下,用户 has_one 房间。或者一个用户可以创建多个房间吗?用户可以加入房间,例如,如果有一个 Rooms_Visitors 表,其中 RoomId 和 UserId 标识一行。

    如果不了解您的广泛用例,很难回答。 我建议你学习一下 SQL 关系,然后你的用例的答案就会变得很清楚。

    【讨论】:

    • 一个用户应该可以创建一个房间,这个用户是这个房间的所有者,不能创建或加入其他房间。不是所有者的所有其他用户都应该能够加入房间,只有一个。
    • 那么,如果一个用户不能同时是所有者和访问者,我也会采用@K M Rakibul Islam 建议的继承策略。我会这样改变模式: # 我们系统类的用户 User
    • 抱歉格式错误,找不到如何将架构键入为代码
    【解决方案2】:

    您可以通过这种方式设计模型。您实际上可以拥有两种类型的用户:OwnerUser,它们可以从 BaseUser 继承,其中 BaseUser 是具有所有常见用户属性的类。

    而且,您的模型关联可能如下所示:

    class BaseUser < ActiveRecord::Base
      # all the common user attributes here
    end
    
    class Owner < User
      has_one :room
    end
    
    class User < BaseUser
      has_many :rooms
    end
    
    class Room < ActiveRecord::Base
      belongs_to :owner
      belongs_to :user
    end
    

    owner 有一个roomroom 属于owneruser 有很多 roomsroom 属于 user

    您必须在rooms 表中添加owner_iduser_id。 您还可以在 base_users 表中使用 user_type 列来指示这是什么类型的用户(即 owneruser)。

    另外,请查看cancancan gem,它是 Ruby on Rails 应用程序的授权 Gem。您将需要具有不同类型的能力,例如:所有者将能够创建房间但用户不能创建房间,他们只能加入。你需要使用授权来处理这些事情。

    【讨论】:

    • 用户创建房间时是否有可能自动成为“所有者”?
    • 它不会自动发生。但你可以做到这一点。创建房间后,您可以将所有者关联到该房间,但可以将许多用户关联(即可能用户可以加入)到该房间。
    • 我的整个应用程序都是基于设计的。康康康有必要吗?
    • 设计用于身份验证。 Cancancan 用于授权。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2018-06-04
    • 2013-06-25
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多