我正在建立一个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
。我很丢失 - 关于在这里代表同一模型的多个关联的最佳方法的任何想法?
答案 0 :(得分:12)
所以我认为我遵循你想要达到的目标,这是在Dia中创建的一个快速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
使用Membership
和user_id
创建模型group_id
?