【问题标题】:how to model this relationship如何建模这种关系
【发布时间】:2013-10-17 20:46:17
【问题描述】:

我正在启动一个新的 3.2 rails(理想情况下希望使用 MySQL)项目,该项目专注于销售不同类型的车辆。我们从汽车、摩托车和拖车建模开始。我正在考虑拥有一个处理常见方面的 Vehicle 类(例如 is_enabled ),然后为每个子类(例如 has_one:motorcycle_profile )提供一个配置文件。

class Vehicle < ActiveRecord::Base
  attr_accessor :is_enabled, :year #
end

class Motorcyle < Vehicle
  has_one :motorcycle_profile  
end

class MotorcyleProfile < ActiveRecord::Base
  attr_accessor :front_tire # something motorcycle specific
end

...

这听起来像是一种合理的方法吗? STI 会帮助解决这个或那个更多的问题吗?

谢谢帮助

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-3.2


    【解决方案1】:

    我对这类网店软件的体验是,您很少需要一种产品与其他类型的产品表现不同。毕竟,它们都可以通过价格、产品代码和一些照片以几乎相同的方式购买。但是,您可能希望在不同种类的产品上包含不同的属性。

    例如,自行车上的燃料类型属性几乎没有意义,而汽车上的踏板属性同样毫无意义。与其创建不同的 ActiveRecord 模型来将不同的属性硬塞到不同的表中,我认为您应该考虑将共享属性放在普通列中,然后将自定义数据放入哈希存储中,这由 Rails 4 和 Postgres 支持。

    它基本上允许您为每个单独的产品记录拥有一组不同的属性。

    【讨论】:

    • 谢谢 Niels,我明白你的想法。老实说,我还没有跳到 Rails 4 和 Postgres(可能会做 3.2 和 MySQL)。不过,我会研究这些建议。尽管在哈希存储中使用它进行搜索、范围等,但我会有点担心。此外,对于新开发人员来说,它可能有点不透明。但这些事情会随着时间而改变。
    • Postgres 支持查询单个自定义属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多