从多个数据源创建相同的模型

时间:2010-08-15 18:37:18

标签: ruby-on-rails ruby design-patterns single-table-inheritance

这主要是一个设计模式问题。我有一种类型的模型,我将从多个来源获取数据。因此,例如,我将从API创建一条记录,其中另一条记录是通过Nokogiri的屏幕抓取创建的。

我的问题在于如何最好地抽象出这些不同的数据源。现在我正在构建返回相同哈希的lib类,然后我用它来设置模型的属性。但我想知道这不是一个使用STI的情况。或者,如果还有其他方法可以做到这一点,我只是没想到。

1 个答案:

答案 0 :(得分:0)

我认为您的设计决定很大程度上取决于存储所需的属性。根据您的描述,听起来您拥有一个包含多个数据源的模型,但无论源是什么,它都将存储相同的属性。在那种情况下,STI似乎有点矫枉过正。从表中检索行时,源是API还是屏幕抓取器是否重要?如果没有,那么您可以为每个数据源定义单独的方法,并在控制器中使用适当的方法。

@instance = MyModel.new(:datasource=>"API")`

除非你真的需要,否则不要担心继承(或混合来自模块的代码)。有一些问题 - 例如,某些宝石/插件并不完全支持STI。