【问题标题】:Two different profile types两种不同的配置文件类型
【发布时间】:2011-03-26 07:34:30
【问题描述】:

假设您有两种不同类别的用户,它们具有不同的个人资料:一种用于音乐艺术家,另一种用于听众。每个配置文件都有一些重叠的属性和一些不同的属性。您是否应该为每个不同的配置文件设置单独的模型?或者你应该在用户表中有一个二进制数据列来判断用户是否是艺术家?这将如何构建?

【问题讨论】:

    标签: ruby-on-rails ruby model profile


    【解决方案1】:

    您可以使用Single Table Inheritance,这可以通过创建模型的子类来实现。

    生成带有type:string 列的Profile 模型(The name can be overriden):

    $ rails g model Profile type:string
    

    现在,在 profile.rb 中,对您的模型进行子类化:

    class Profile < ActiveRecord::Base
      # Common profile attributes
    end
    
    class Artist < Profile
      # Things specific to an artist profile
    end
    
    class Listener < Profile
      # Things specific to a listener profile
    end
    

    当您创建ArtistListener 时,它将与配置文件的类型一起保存在profiles 表中。

    例如,如果您执行Artist.create,它将与type='Artist' 一起保存在profiles 表中。

    当您获取记录时,它将以其适当的模型返回,无论是ArtistListener 还是通用的Profile

    有关此技术的更多信息,请查看this question

    This blog post 也很好地解释了它。

    【讨论】:

    • Artist 和 Listener 类都在 Profile 模型中?你能指出我更深入地了解单表继承的任何来源吗?
    • 另外,我如何从控制台生成这个?
    • @Justin,更新了答案。令人失望的是,这项技术的文档很少。
    • 是的,我同意,那篇博文不错,但后面的一些内容有点令人困惑
    • 你链接的博文移动了,我找到了here
    【解决方案2】:

    一个名为 Profile 的默认模型包含公共属性和另外两个(Artistic、Listener)模型,每个模型具有特定属性

    并且在配置文件中,使用一个字段来保存类型(艺术家或听众)

    只是我的意见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多