0

サードパーティの API からオブジェクトをクエリし、Rails 環境で使用するオブジェクトにビルドする API ラッパーを作成しています。そのために、私は 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 に答える