Can Rails Active Record可以同时理解两个表之间的两个同时关系吗?

时间:2010-01-29 03:32:09

标签: activerecord table-relationships

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

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

我还想做的是为每个用户指定一个ACTIVE组。如果不是我已经定义的habtm关系,我会在活动组的用户中创建一个“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关系位于他们所属的组之外。有关如何通过约束使用活动组必须是用户所属的组的任何想法?
  4. 感谢您的任何见解。我进入Rails学习曲线需要几周时间,我认为深入了解这个小问题会加深我对模型和表格关系的理解。

1 个答案:

答案 0 :(得分:1)

格雷格 - 我以前做过这件事,类似于你的建议。我使用了“primary_group”而不是“group”,并将foreign_key设置为“primary_group_id”,并将:class_name =&gt; '分组'

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

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