7

外部 API から情報を取得するモデルを Rails アプリケーションで使用しようとしています。私がやりたいことは、ActiveRecord モデルが提供するものと同様の方法 (具体的には関連付け、およびチェーン可能なクエリ メソッドの同じスタイル) で、データ モデル (複数の API 呼び出しから生じる情報で構成される可能性がある) にアクセスすることです。

私の最初の本能は、必要な ActiveRecord の部分を再作成し、この API を組み込むことでした。「車輪の再発明」を望んでおらず、機能を追加するにはどれだけの作業が必要になるかを正確に把握しているため、一歩下がって、これにアプローチする方法を再評価する必要がありました。

テーブルなしで ActiveRecord を使用する方法を見つけ (Railscast #193 Tableless Model およびこちらのブログ投稿を参照)、ActiveRecord を調べました。ActiveModel には検証のみが含まれているように見えるため、この状況で非常に役立つかどうかはわかりません。テーブルなしで ActiveRecord を使用するという回避策が最良の選択肢のように思えますが、これを行うためのよりクリーンな方法があると思います。

以下は、ActiveRecord 機能を再作成しようとしていたときに記述したコードの一部を含む要点であり、ActiveRecord ソース自体から大幅に借用しています。

私の質問は次のとおりです。上記の ActiveRecord に回避策を実装するか、自分で機能を再作成することで、必要な機能 (クエリ メソッド、リレーションの連鎖) を取得できますが、これらは本当に理想的なソリューションですか?

4

1 に答える 1

3

Rails はまだ Ruby の下にあることを思い出してください。

アプリケーション内でインスタンス化されたクラスとして外部 API を表すことができます。

class 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 を混合して、属性のハッシュ割り当てやフォームの検証などを使用することもできます。

チューブの TfL フィードに対して行った API の抽象化を見てください。service_disruption

于 2013-06-12T17:41:09.863 に答える