我正在尝试实施一个用户可以创建组的组系统,其他用户可以加入该组。
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" = ?
我认为这与我的用户设置方式有关,但无法弄明白。
此外,一旦我能够获得包含已加入“群组”的所有用户的列表,我该如何添加/删除用户?
感谢。
答案 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_id
和group_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,以便在创建组后,其他用户可以加入该特定组。所有者和成员都应该是模式中的“引用”类型。你应该没问题。