【问题标题】:Create 'groups' that users can join, what would be a good approach?创建用户可以加入的“组”,什么是好方法?
【发布时间】:2011-09-30 11:09:00
【问题描述】:

我想建立用户可以加入的“群组”, 所需的步骤和事情的流程在我的脑海中,但构建它的代码缺少一些,因为我仍在学习 rails。我想就您的想法提出一些建议,了解以下需要完成的最佳实践:

  • 您可以创建一个名为“test”的组
  • 你自动加入测试组,其他用户可以加入
  • 如果想查看加入我的组“测试”的用户列表

我正在考虑创建一个模型会话,例如 组|名称| 但是我怎么能存储这个会话中的多个用户呢? 例如,我是否应该制作一个 user_id 的数组并制作一个额外的列,例如 组|名称|用户 ID ?

什么是最佳实践以及我可以使用哪些 rails (3) 方法来获得并运行上述功能的一个非常粗略的版本?

【问题讨论】:

  • 您想通过设计或自定义身份验证(您自己的会话处理...)来实现上述目标吗?虽然会话的目的是成为一种识别用户的独特方式,但您最好通过用户角色来管理/跟踪此类。
  • 也许术语“会话”有点让人困惑,这与验证用户或登录他们无关,我已经为此使用了设计,这些是与设计分离的“会话”,更好会话的名称将改为“组”,我在上面的帖子中编辑以更改它,因为它会导致混淆
  • 所以问题会变成:如何知道组的哪些用户当前处于活动状态?要知道哪些用户belong_to 一个组很容易...

标签: ruby-on-rails session join


【解决方案1】:

据我了解,这是多对多的关系。所以你会有 3 个模型:

class User < AR
  has_many :memberships
  has_many :groups, :through => :memberships
end

class Membership < AR
  belongs_to :user
  belongs_to :group
end

class Group < AR
  has_many :memberships
  has_many :users, :through => :memberships
end

并了解哪些用户属于某个组:

@group = Group.find_by_name("test")
@users_group = @group.users

更新

确保创建组的用户也属于它:

# in group_controller.rb
def create
  @group = Group.new(params[:group])
  @group.users << current_user

  if @group.save
    # ... etc
  end
end

当然current_user 应该存在/使用通常的before_filter 登录(如果我没记错的话,它的authenticate! 带有设计)

【讨论】:

  • 谢谢,这确实是一个合理的解决方案,而且我认为很复杂。我试试这个,因为我还在学习 Rails。如果我也想知道是谁“发起”了这个小组怎么办。我忘了在开头的帖子中提到,1 个用户可以创建这个组,其他人可以加入,但是我需要知道这个 1 个用户启动了这个组。
  • 您好,我更新了答案。这是一种方法。您还可以将 params[:group] 中的当前用户 ID 作为隐藏字段传递,并创建一个正确设置关联的虚拟属性。观看 ryan bates railscasts 他们会教很多东西......
  • 正在处理这个问题,尽管我对每个表应该包含的列感到困惑,以使这个工作参与者表有 |id|created_at|updated_at 目前不可能是正确的
  • participants 表需要一个 user_id 和一个 group_id 来加入用户和组。
  • 我自己已经弄清楚了,谢谢,我要搜索更多更多的关系信息/截屏,以更好地了解它来自 php 世界的工作方式 rails 对我来说仍然是新的。
【解决方案2】:

抱歉,我正在创建一个新线程,但我现在无法就我的新状态发表评论。

@charlysisto 您对这个问题的回答涉及用户、成员资格和组类。我理解用户和组的需求,但我对为什么我们需要一个成员资格类感到困惑。如果有什么没有更有意义的 Groups 类与 Group?

    class User < AR
    belongs_to :group
    belongs_to :groups, :through => :group
    end

    class Groups < AR
    has_many :groups
    has_many :users, :through => :group
    end

    class Group < AR
    has_many :users
    belongs_to :groups
    end

你怎么看?

【讨论】:

  • oups 很抱歉回答迟了。 Groups 是复数形式,不符合 ActiveRecord 模式,表示表格的单数行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2011-02-05
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
相关资源
最近更新 更多