【发布时间】:2011-08-20 09:54:38
【问题描述】:
我正在尝试设置一个应用程序,其中包含可由用户或现有组组成的组。
例子:
- 用户 Andy、Bob、Charlie 和 David 位于 第一个转发器中 em> 组。
- 用户 Eddy、Frank、George、Howard、Iggy 和杰克属于第一中场组。
- 用户 Kenny、Lenny、Max、Ned、Oscar、Peter 和 Quin 属于第一后卫组。
- 用户Rita是1st守门员组中的唯一用户。
- 用户 Andy、Bob、Eddy、Frank 和 Kenny 是也属于 alpha 篮球运动员 组。
- 第一前锋、第一中场、第一后卫和第一守门员组在中第一个足球运动员组。
- 第一前锋、第二中场、第三后卫和第四守门员组在中全明星球员组。
据我了解,这将需要一组多态、自引用的模型。
基于这样的理解,我目前拥有的三个模型和对应的类分别是:
用户
- id:整数
- 名称:字符串
- 加上其他个人特定数据
class User < ActiveRecord::Base
has_many :memberships, :as => :child
has_many :groups, :through => :memberships
end
群组
- id:整数
- 名称:字符串
- 加上其他特定组的数据
class Group < ActiveRecord::Base
# parental membership role
has_many :memberships
has_many :users, :through => :memberships
# child membership role
has_many :memberships, :as => :child
end
会员资格
- child_id:整数
- group_id:整数
- 会员类型:字符串
- 加上其他会员特定的数据
class Membership < ActiveRecord::Base
belongs_to :child, :polymorphic => true
belongs_to :group
end
当我尝试通过Membership.first.child 之类的方式访问孩子时,我总是收到=> nil 响应。
我的模型和类设置是否正确?
如果没有,我做错了什么?
如果是这样,我如何拉孩子的信息?
或者我的处理方法不正确,如果是,我应该如何处理?
【问题讨论】:
-
您如何保存此会员模式?多态关联列在哪里?
-
@Mauricio - 目前我只是使用控制台手动创建、保存和查看模型的数据。据我了解,在 Memberships 模型中,
child_id和membership_type是多态关联列,Membership 类中的belongs_to :child, :polymorphic => true和User中的has_many :memberships, :as => :child和Group类提供其他多态信息。当然,由于我目前无法访问组的子信息,我假设我搞砸了。 ;) -
是的,你做到了,多态关联列应该命名为 child_id 和 child_type。
-
@Mauricio - 谢谢! 我显然误解了我查看的几个示例,因此甚至没有尝试过这么明显的东西。请您发表您的最后一条评论作为答案。
标签: ruby-on-rails ruby-on-rails-3 polymorphism self-reference