0

我正在构建一个 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 方法,我会做一些可怕的错误吗?我是以完全错误的方式处理这个问题吗?

4

1 回答 1

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 的 railscast: http ://railscasts.com/episodes/219-active-model更详细。

于 2013-09-10T23:59:34.210 回答