我实际上是想通过关联创建一个has_many。首先让我解释一下如何运作。
我有users
,groups
和members
个表格。规则如下:
这是我目前的关系类:
class User < ActiveRecord::Base
# Associations
has_many :groups # As user, I create many groups
has_many :members
has_many :groups, through: :members # But I can also belongs to many groups
end
class Group < ActiveRecord::Base
# Associations
belongs_to :user
has_many :members
has_many :users, through: :members
end
class Member < ActiveRecord::Base
# Associations
belongs_to :user
belongs_to :group
end
我的问题是关于群体关系。您看到用户可以创建组,这意味着:
has_many :groups
但用户也可以是群组成员:
has_many :groups, through: :members
由于这种新的关系,我的75%的规格现在已被打破。此外,我注意到如果我使用与组关联的用户登录,我可以看到实际的组列表。但是当我尝试以组所有者(创建组的人)身份登录时,我看不到该用户创建的组。)
主意?
答案 0 :(得分:1)
你不是在寻找一个关于has_many的关系
试试:
class User < ActiveRecord::Base
# Associations
has_and_belongs_to_many :groups
has_many :created_groups, class_name: 'Group', foreign_key: 'creator_id'
end
class Group < ActiveRecord::Base
# Associations
belongs_to :creator, class_name: 'User'
has_and_belongs_to_many :members, class_name: 'User'
end
如果您不需要会员类进行任何特殊处理,这是一个解决方案。 您应该进行类似的迁移:
class CreateGroupsUsers < ActiveRecord::Migration
def change
create_table :groups_users, id: false do |t|
t.references :group
t.references :user
end
add_index :groups_users, [:group_id, :user_id]
add_index :groups_users, :user_id
end
end
你必须确保你的群组表有一个creator_id!