次のような API を持つサードパーティ ライブラリからデータを取得しようとしています。
https://foo.com/user.json?username=<USERNAME>
「users.json」の代わりに「user.json」を使用するように ActiveResource を強制する方法がわかりません。出来ますか?
私は react_resources 宝石で動作させました...純粋なActiveResourcesでそれを行う方法はありますか?
次のような API を持つサードパーティ ライブラリからデータを取得しようとしています。
https://foo.com/user.json?username=<USERNAME>
「users.json」の代わりに「user.json」を使用するように ActiveResource を強制する方法がわかりません。出来ますか?
私は react_resources 宝石で動作させました...純粋なActiveResourcesでそれを行う方法はありますか?
class User < ActiveResource::Base
self.element_name = "user"
end
次に、ActiveResource から //foo.com/user/.json ではなく //foo.com/user.json に見える 1 つの要素を URL から取得する方法を尋ねます。
User.find(:one, :from => "https://foo.com/user.json?username=#{<USERNAME>}"
コメントに応じて編集
find() を使用するたびにリクエストの完全な URL を入力する必要なく、これを行う方法はありますか?
1 つの方法は、完全な URL を実行するメソッドをクラスに定義することです。
class User < ActiveResource::Base
self.element_name = "user"
def self.find_by_username(username)
find(:one, :from => "https://foo.com/user.json?username=#{username}"
end
def find
self.class.find(:one, :from => "https://foo.com/user.json?username=#{username}"
end
end
もう 1 つの方法は、element_path を再定義することです。
class User < ActiveResource::Base
self.element_name = "user"
def self.element_path(id, prefix_options = {}, options = {})
"https://foo.com/user.json?username=#{prefix_options["user_id"]}"
end
end
これをモンキーパッチと呼ぶ人もいれば、オブジェクト指向プログラミングと呼ぶ人もいます。コードに入る場合や、Ruby の動的な性質を使用して基本的な動作を変更する場合は、モンキー パッチを適用するだけであり、これはオブジェクト指向プログラミングで物事を行うための完全に正当な方法です。ただし、Ruby コミュニティは OOP をあまり使用せず、継承をほとんど無視して、より緩い (そして動作が良くない) ミックスインを支持し、ポリモーフィズムにダックタイピングのみを使用します。
ActiveResource 規約を受け入れるように Web サービスを再定義できない URL を構築するために ActiveResource をいじる必要があるという問題が、多くの人が代わりに HTTParty を使用している理由です。" URL を作成する必要がある場合は、HTTParty を使用することもできます。 "
URL 内のリソース名の複数形のみを削除する必要がある場合は、次のようにオーバーライドしますcollection_name
。
class User < ActiveResource::Base
self.element_name = "user"
def self.collection_name
element_name
end
end