Ruby on rails ActiveRecord:模型的不同表示形式

Ruby on rails ActiveRecord:模型的不同表示形式,ruby-on-rails,inheritance,activerecord,mixins,Ruby On Rails,Inheritance,Activerecord,Mixins,我有一个名为Book的模型,它表示一本包含所有可用数据的书。现在,我需要将书籍实例专门化为几个案例(仅示例): AmazonBook的id来自asin(亚马逊标准标识号)或isbn(取决于哪种可用,首选asin)。它还有一个特定的csv版本的图书记录。“特殊属性”asin包含在基本图书记录中 其他市场上的书籍需要其他(虚拟?)属性,例如,到Booklooker市场的csv导出具有不同的结构,或者Booklooker市场具有自己的“特殊属性”。这些特殊属性都存储在基本图书记录中 专用实例始终引

我有一个名为Book的模型,它表示一本包含所有可用数据的书。现在,我需要将书籍实例专门化为几个案例(仅示例):

  • AmazonBook的id来自asin(亚马逊标准标识号)或isbn(取决于哪种可用,首选asin)。它还有一个特定的csv版本的图书记录。“特殊属性”asin包含在基本图书记录中
  • 其他市场上的书籍需要其他(虚拟?)属性,例如,到Booklooker市场的csv导出具有不同的结构,或者Booklooker市场具有自己的“特殊属性”。这些特殊属性都存储在基本图书记录中
专用实例始终引用数据库中的同一图书记录,例如,该记录具有asin和特殊booklooker属性或其他属性。我这样做是为了提高速度,避免连接操作(数据库中大约有200000条记录)

什么是实现这一目标的正确方式?继承(AmazonBook 我想让我的代码更加结构化,目前我有一个胖模型类,其中包含类似amazon_id、amazon_csv、other_id、other_csv等方法。。。 我希望使用@book.amazon.to_csv或@book.booklooker.csv这样的访问器来访问同一视图中的不同表示。两个不同的例子@amazon_book和@booklooker_book实际上是同一本书,但我认为这两本书不是最好的选择

也许一种api就是解决方案?还是一种“方法名称空间”


谢谢你的帮助

创建多个与Book有一个关系的模型

Amazon_Book 
  belongs_to :book

Booklover_Book
  belongs_to :book

Book
  has_one :amazon_book
  has_one :booklover_book
然后您所需的访问器将工作

book = Book.find(...)
book.amazon_book.asin 
book.booklover_book.whatever 

您可以添加、修改和删除特定于市场的模型,而不会影响整个图书模型或相互影响。

这可能是使用单表继承的罕见情况之一。这不是问题所在。一本书同时是一本亚马逊书和一本书。对于STI,每个子类型都有自己的图书记录。在您的示例中,对于子类型:狮子也必须是猫鼬,根据当前的用例,它必须能够同时具有这两种行为。啊,好吧,这样才不会出现问题。