在Ruby on Rails中使用由外部API支持的模型的ActiveRecord接口

我正在尝试在我的Rails应用程序中使用模型从外部API检索信息。 我想要做的是以类似于ActiveRecord模型提供的方式访问我的数据模型(可能包含多个API调用产生的信息)(特别是关联,以及相同类型的可链式查询方法)。

我最初的本能是重新创建我想要的ActiveRecord部分并合并这个API。 不想“重新发明轮子”并确切地看到增加更多function需要多少工作让我退后一步并重新评估如何处理这个问题。

我已经找到了在没有表的情况下使用ActiveRecord的方法(参见:Railscast#193 Tableless Model和这里的博客文章)并查看了ActiveRecord。 因为ActiveModel似乎只包含Validations,所以我不确定在这种情况下它是否非常有用。 在没有表格的情况下使用ActiveRecord的解决方法似乎是最好的选择,但我怀疑有一种更清洁的方式来实现这一点,我只是没有看到。

这是一个要点,其中包含我尝试重新创建ActiveRecordfunction时编写的一些代码,这些代码是从ActiveRecord源本身大量借用的。

我的问题归结为:我可以通过实现上面指定的ActiveRecord的变通方法或者自己重新创建function来获得我想要的function(链接查询方法,关系),但这些是非常理想的解决方案吗?

请记住,Rails仍然只是Ruby。

您可以将外部API表示为应用程序中的实例化类。

def Event def self.find(id) #...External http call to get some JSON...# new(json_from_api) end def initialize(json) #...set up your object here...# end def attendees #...external http call to get some JSON and then assemble it #...into an array of other objects end end 

因此,您最终编写本地抽象来从api调用创建ruby对象,您可以将ActiveModel或Virtus混合到其中,这样您就可以使用属性的哈希分配和表单的validation等。

看一下我为管子的TfL饲料做的API抽象。 service_disruption