我有一个问题,我认为这对大多数 RoR 开发人员来说是基本的。事实上,它更多的是关于“理解”而不是真正的编程(我已经编写了一些模块来扩展 ActiveRecord::Base 以允许轻松生成与 Ext-JS 相关的东西而没有任何问题)。
让我们举一个简单的例子,我将使用面向 ORM 的语言而不是数据库/模型语言。
- 第三方是一个基本实体,有一个名为“标签”的通用成员。
- 第三方实例可以是客户、供应商,或者两者都不是(因此客户/供应商就像具体的接口而不是继承的类)。
- 客户和供应商都有专门的成员,它们中的大多数对于每个类都是唯一的(客户/供应商除了通过第三方绑定的标签字段外不共享太多数据)。
我试图做各种各样的事情:
- 第三方 < ActiveRecord::Base
- 客户 < 第三方
- 供应商 < 第三方
[编辑] 在这里错过了我的解释。我的意思是:第三方的一个实例可以是客户、供应商、两者或无。正如第一个评论者指出的那样,我的例子可能不是最好的......您可以用“Character”替换“ThirdParty”,用“Archer”/“SwordsMan”替换“Customer”/“Supplier”。一个字符可以是一个、两个、两个或一个都没有,但会提供有关任何 Character 实例的信息。Archer / SwordsMan 上的 getter 应返回 Character 实例“实现”接口契约,而不是仅返回他们自己的实例,并在角色对象上使用“getter”。[/编辑]
我也试过:
- 第三方 < ActiveRecord::Base (has_one Customer; has_one Supplier)
- 客户 < ActiveRecord::Base (belongs_to ThirdParty)
- 供应商 < ActiveRecord::Base (belongs_to ThirdParty)
但这对我来说似乎有点“丑陋”,因为我必须做 Customer.find(something).third_party.label 来访问我的“接口”“继承”的数据。
此外,我可以在我的第三方模型中包含一个 customer_id 和一个供应商 ID 字段,但它似乎也不正确,因为一个第三方可以是两者,或者它们都不是......
当然,我希望能够找到一个不妨碍/没有太多技巧的解决方案,例如让我可以为另一个模型做一些多态关联(例如可寻址或可评论,可接触等...)
我也一直在阅读很多关于这个主题的文章,比如在这样的博客上:http: //mediumexposure.com/multiple-table-inheritance-active-record/ ...但我迷失在正确的方式上(在我在该主题上找到的大多数文档都不清楚是否适用于 Rails 1、2、3 ......最近在这个问题上实施了什么,等等)。
有人可以为我提供各种“最新”网站或适合我给出的示例的示例吗?
提前,我感谢大家提出我的问题,并最终向我解释在这个特定主题上使用的不同技术。
PS:如果您需要我解释更多我在寻找什么,我可以尝试......但请记住,我的英语在这个领域有点“有限”,因为我对 RoR 比较陌生。