我有一个名为Book的模型,它代表一本包含所有可用数据的书。我现在需要针对几种情况的书籍实例专门化(仅举例):
专用实例始终引用数据库中的相同书籍记录,例如记录具有asin和特殊的booklooker属性或其他。为了速度,我这样做了,以避免连接操作(数据库中大约200000条记录)。
实施此方法的正确方法是什么?继承(AmazonBook< Book,BooklookerBook< Book,...)或非ActiveRecord类,带有获取图书实例的初始化程序)或...... ??
我想让我的代码更有条理,目前我有一个胖模型类,有amazon_id,amazon_csv,other_id,other_csv等方法...... 我希望有一个像@ book.amazon.to_csv或@ book.booklooker.csv这样的访问器来访问同一视图中的不同表示。实际上是同一本书的两个不同的实例@amazon_book和@booklooker_book不是我认为的方式......
也许有一种api是解决方案?或者一种"方法命名空间"?
感谢您的帮助!
答案 0 :(得分:0)
使用has_one关系创建许多与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
您可以添加,修改和删除特定于市场的模型,而不会影响整个图书模型或彼此。