Ruby on Rails - 群组中的用户

时间:2017-01-07 06:55:41

标签: ruby-on-rails ruby

我正在尝试实施一个用户可以创建组的组系统,其他用户可以加入该组。

class User < ApplicationRecord
    has_many :groups
end

class Group < ApplicationRecord
    belongs_to :owner, :class_name => "User"
    has_many :members, :class_name => "User"
end

检查所有者时,我可以成功使用:

<% if current_user == @group.owner %>

但我无法通过以下方式检查小组成员:

<%= @group.members.count %>

当我遇到错误时:

SQLite3::SQLException: no such column: users.group_id: SELECT COUNT(*) FROM "users" WHERE "users"."group_id" = ?

我认为这与我的用户设置方式有关,但无法弄明白。

此外,一旦我能够获得包含已加入“群组”的所有用户的列表,我该如何添加/删除用户?

感谢。

2 个答案:

答案 0 :(得分:2)

这里有两种可能性:

  

一个用户可以属于多个群组

如果一个用户只属于您的关联所说的一个组,那么您需要将group_id属性添加到User模型或users表中,该表将标识用户在哪个组中属于。目前,您没有该列,这就是它抛出异常的原因。关于owner,您owner_id表中有一个Group,它为您提供了owner User个对象。

User - group_id
Group - owner_id

但是这样您只有一个与group相关联的User,因此has_many :groups模型中的User无效。要拥有多个,您需要另一个表格:

  

一个用户只属于一个群组

如果一个用户可以属于多个群组,那么您需要再创建一个类似UserGroups的模型,该模型将具有user_idgroup_id,并且关联将如下所示:

class User < ActiveRecord::Base
  has_many :user_groups
  has_many :groups, through: :user_groups
end

class Group < ActiveRecord::Base
  has_many :user_groups
  has_many :users, through: :user_groups #This can be members also using `class_name`
end

class UserGroup < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

答案 1 :(得分:1)

用户也属于某个群组(您忘了)。 在组架构中,您需要一个组ID,以便在创建组后,其他用户可以加入该特定组。所有者和成员都应该是模式中的“引用”类型。你应该没问题。