Rails ActiveRecord覆盖默认查找

时间:2013-09-10 23:50:45

标签: ruby-on-rails activerecord

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

1 个答案:

答案 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更详细。