我正在构建一个API包装器,它将从第三方API查询对象并将它们构建到我的Rails环境中使用的对象中。为此,我正在构建一组使用ActiveRecord的模型(用于其某些功能),但不支持数据库。我希望能够像这样打个电话:
obj = MyModel.find(1)
并且代码是这样的:
def MyModel.find id
# check for object in cache
# check for object in db
# grab object from API
# return object
end
如果我覆盖默认的find方法,我会做一些可怕的错误吗?我是以完全错误的方式接近这个吗?
答案 0 :(得分:2)
如果您没有使用数据库,那么您不需要ActiveRecord。 ActiveRecord的全部目的是为您提供关系数据库的映射。
我认为你想要的是一个类来实现ActiveRecord
提供的某些部分,而Rails 3已经将这些部分组成了可以根据需要包含在常规'ol类中的类。请查看此文章以获取更多详细信息:http://www.rubyinside.com/rails-3-0s-activemodel-how-to-give-ruby-classes-some-activerecord-magic-2937.html
例如,如果您只想对某个类进行验证,则可以使用include ActiveModel::Validations
,然后您将获得所有良好的错误处理以及.valid?
和validates presence: true
类型的行为你已经习惯了。
我还建议Ryan Bates的铁路广播:http://railscasts.com/episodes/219-active-model更详细。