2012-09-26 8 views
7

私がどのように見えるAPIがあるサードパーティのライブラリーからのデータをつかむしようとしています:私は代わりに「user.json」を使用するActiveResourceを強制する方法を見つけ出すことはできませんActiveResource一意の名前を持つREST APIからリソースをフェッチする方法は?

https://foo.com/user.json?username=<USERNAME>

を"users.json"出来ますか?

私はreact_resources gemで作業しています...純粋なActiveResourcesでそれを行う方法はありますか?

答えて

8
class User < ActiveResource::Base 
    self.element_name = "user" 
end 

次は、//foo.com/user/.jsonの代わりに//foo.com/user.jsonすることがActiveResourceに見えるURLから一つの要素を取得する方法を尋ねるしようとしている

応答で
User.find(:one, :from => "https://foo.com/user.json?username=#{<USERNAME>}" 

編集は私が)(検索を使用したいすべての単一の時間を、要求の完全な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を使用する場合があります。」

+0

は、方法はありますfind()を使用したい毎回要求の完全なURLを入力することなくこれを行うには? –

+0

あなたはそれを求めました。回答が編集されました。 –

+1

'site'と' prefix'を使ってURLの最初の部分を構成することもできます。 – funwhilelost

2

あなただけのURLでリソース名複数形を取り除くために必要がある場合は、上書きcollection_name

class User < ActiveResource::Base 
    self.element_name = "user" 

    def self.collection_name 
    element_name 
    end 
end 
関連する問題