【问题标题】:Rails Models with types How to model this?带有类型的 Rails 模型如何建模?
【发布时间】:2012-05-30 12:40:14
【问题描述】:

我有两个模型

业务和代表

当企业或代表注册时,他们会看到“您是如何得知我们的?”选项列表

发现方式是动态的,因此管理员可以添加企业或代表可以发现我们的方式。例如,管理员可以添加“通过 Google”、“通过朋友”、“通过其他代表”等选项。每种发现类型都可以针对企业或代表,或两者兼而有之。

我应该如何对discovery_type模型进行建模,它应该有什么关系,我在想一些事情如下

Schema : 
table: discovery_types
name: string
type: string(can be one of 'business','representative', 'both')

class DiscoveryType< ActiveRecord::Base
  has_many :businesses
  has_many :representatives
end

class Business< ActiveRecord::Base
  belongs_to :discovery_type
end

class Representative< ActiveRecord::Base
  belongs_to :discovery_type
end

我只是对上述方案没有信心。所以任何人都可以指出任何问题,并可能提出更好的出路..

我还应该在任何列上添加索引吗?

【问题讨论】:

    标签: database ruby-on-rails-3 activerecord


    【解决方案1】:

    已编辑:不是多态关联,你是对的 - 这是相反的关系。

    这应该适用于您想要的关系 -

    class DiscoveryType< ActiveRecord::Base
      has_many :discoveries
    end
    
    class Discovery < ActiveRecord::Base
      belongs_to :discovery_type
    end
    
    class Business < Discovery
    end
    
    class Representative < Discovery
    end
    

    如果您将type 列留在discovery_types 中,Rails 应该会自动使用它

    【讨论】:

    • 我不这么认为..在多态情况下,您有一个模型可以多态地属于多个模型,但这是相反的,我有两个模型都属于一个模型...您能详细说明如何这可以使用多态关联建模吗?
    • 但是在这个模型中,一个企业有很多发现类型..该企业将有一个发现类型,一个发现类型需要有很多业务..我想要这样的查询,例如DiscoverType.first.businesses这将告诉我哪个企业使用“Google”发现了我们,对于每个企业或代表,我将有类似 @business.discovery_type 的信息,这将告诉我该企业是如何发现使用的。
    • 你是对的 - 多态关联是你想要的反向关系。我编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多