Rails - 与同一模型的多个关联

时间:2012-03-19 21:48:57

标签: ruby-on-rails activerecord polymorphic-associations

我正在建立一个Rails应用程序来跟踪一个群体成员之间的费用/债务,让我们说一个家庭。到目前为止,我有群组,用户和费用的模型 - 基础知识。现在我正试图弄清楚群组和用户之间的关联。例如,一个组可以拥有许多用户,并且用户可以拥有/属于许多组,因此我使用连接表设置了HABTM关联。但我很困惑,因为一个集团也可以有一个所有者,也是一个用户。这就是我现在所处的位置:

class Group < ActiveRecord::Base
    has_and_belongs_to_many :users
    has_one :owner, :class_name => "User"
end

class User < ActiveRecord::Base
    has_and_belongs_to_many :groups
end

Group表上当前有一个owner_id字段,但是当我尝试执行涉及column users.group_id does not exist的任何操作时,我收到PostgreSQL错误group.owner。我很丢失 - 关于在这里代表同一模型的多个关联的最佳方法的任何想法?

2 个答案:

答案 0 :(得分:12)

所以我认为我遵循你想要达到的目标,这是在Dia中创建的一个快速ERD:

simple erd

看起来您只需要在用户和组之间添加所有权的直接关联。我使用了列owner_id,因此表和模型更清晰,避免了对多个user_id列的混淆。然后以下模型将起作用:

class Group < ActiveRecord::Base
    has_and_belongs_to_many :users
    belongs_to :owner, :class_name => "User", :foreign_key => "owner_id"
end

class User < ActiveRecord::Base
    has_and_belongs_to_many :groups
    has_many :owned, :class_name => "Group", :foreign_key => "owner_id"
end

答案 1 :(得分:1)

怎么样:

class Group < ActiveRecord::Base
    has_and_belongs_to_many :users, :through => :membership
    has_one :owner, :class_name => "User"
end

class User < ActiveRecord::Base
    has_and_belongs_to_many :groups, :through => :membership
    has_many :owned, :class_name => "Group"
end

使用Membershipuser_id创建模型group_id