创建用户可以加入的“群组”,这会是一个好方法吗?

时间:2011-09-30 11:09:01

标签: ruby-on-rails session join

我想构建用户可以加入的“群组”, 所需的步骤和事情的流程在我的脑海中,但构建它的代码缺乏一点,因为我还在学习rails。我想就你的想法提出一些建议,以便在下面完成以下工作:

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

我想创建像这样的模型会话 组|名称| 但是,我如何存储此会话中的多个用户? 我应该制作一个user_id的数组,并制作一个额外的列 groups | name | user_ids?

我可以使用什么样的最佳做法和哪些rails(3)方法来启动并运行上述功能的粗略版本?

2 个答案:

答案 0 :(得分:7)

据我所知,这是一对多关系。所以你会有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!并设计)

答案 1 :(得分:0)

抱歉,我正在创建一个新帖子,但我现在无法评论我的新状态。

@charlysisto您对此问题的回答涉及用户,成员资格和群组类。我理解User和Group的需要,但我很困惑为什么我们需要一个Membership类。如果没有,那么让Group类与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

您怎么看?