【问题标题】:How to set up the classes for a polymorphic, self-referential group of models?如何为多态、自引用的模型组设置类?
【发布时间】:2011-08-20 09:54:38
【问题描述】:

我正在尝试设置一个应用程序,其中包含可由用户或现有组组成的组。

例子:

  • 用户 AndyBobCharlieDavid 位于 第一个转发器中 em> 组。
  • 用户 EddyFrankGeorgeHowardIggy杰克属于第一中场组。
  • 用户 KennyLennyMaxNedOscar、Peter 和 Quin 属于第一后卫组。
  • 用户Rita1st守门员组中的唯一用户。
  • 用户 AndyBobEddyFrankKenny 是也属于 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 之类的方式访问孩子时,我总是收到=&gt; nil 响应。

我的模型和类设置是否正确?
如果没有,我做错了什么?
如果是这样,我如何拉孩子的信息?

或者我的处理方法不正确,如果是,我应该如何处理?

【问题讨论】:

  • 您如何保存此会员模式?多态关联列在哪里?
  • @Mauricio - 目前我只是使用控制台手动创建、保存和查看模型的数据。据我了解,在 Memberships 模型中,child_idmembership_type 是多态关联列,Membership 类中的 belongs_to :child, :polymorphic =&gt; trueUser 中的 has_many :memberships, :as =&gt; :childGroup 类提供其他多态信息。当然,由于我目前无法访问组的子信息,我假设我搞砸了。 ;)
  • 是的,你做到了,多态关联列应该命名为 child_idchild_type
  • @Mauricio - 谢谢! 我显然误解了我查看的几个示例,因此甚至没有尝试过这么明显的东西。请您发表您的最后一条评论作为答案。

标签: ruby-on-rails ruby-on-rails-3 polymorphism self-reference


【解决方案1】:

多态关联列应该是child_idchild_type

【讨论】:

    猜你喜欢
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多