0

我有两个表,usersgroups。一个用户可以属于许多组。一个组可以有很多用户。

因此,我使用连接表 groups_users 在用户和组之间创建了have_and_belongs_to_many关系。这一切都按预期工作。

我还想做的是为每个用户指定一个 ACTIVE 组。如果不是我已经定义的 habtm 关系,我会在 users 中为活动组创建一个列“group_id”,然后我会定义模型之间的一对多关系,如下所示:

class User < ActiveRecord::Base
  belongs_to :group
end

class Group < ActiveRecord::Base
  has_many :users
end

这没有用。我无法访问像“@user.group.name”这样的组属性。我怀疑我通过指定两个关系对 Rails 提出了太多要求。

所以我有三个问题。

  1. 如果将这两种关系结合起来会混淆 Active Record ,我可以很容易地理解。是这样吗?
  2. 如果是这样,您将如何实现这些关系?现在我只是手动使用 group_id,但感觉很乱。
  3. 无论我是使用 Active Record 魔法还是手动设置活动组,使用第一个 habtm 关系,用户的活动组都可能在他们所属的组之外。关于如何在活动组必须是用户所属的组的约束下实现这一点的任何想法?

感谢您的任何见解。我已经进入 Rails 学习曲线几周了,我认为深入了解这个小问题会加深我对模型和表关系的理解。

4

1 回答 1

1

格雷格 - 我以前做过这个,类似于你的提议。我使用“primary_group”而不是“group”并将foreign_key设置为“primary_group_id”和:class_name => 'Group'

我不经常使用has_and_belongs_to_many,所以我不知道这是否会导致问题,但我不这么认为——至少对于用户模型来说不会。你没有#group 方法,所以设置belongs_to 应该没问题。我不知道您是否绝对必须在组上有一个 has_many :users 方法,但无论如何您可能都不需要它。这肯定会导致与 habtm 创建的“用户”方法发生冲突。如果确实需要,请尝试 has_many :primary_users 并设置 :foreign_key => :primary_group_id

只是一些想法。你应该能够做你现在正在做的事情,所以不确定是什么失败了。

于 2010-01-29T06:10:24.977 回答