質問

パラメータをに渡そうとしています login メソッドを使用し、そのパラメータに基づいてベース URI を切り替えたいと考えています。

そのようです:

class Managementdb
  include HTTParty

  def self.login(game_name)
        case game_name
        when "game1"
            self.base_uri = "http://game1"
        when "game2"
            self.base_uri = "http://game2"
        when "game3"
            self.base_uri = "http://game3"
        end

    response = self.get("/login")

        if response.success?
      @authToken = response["authToken"]
    else
      # this just raises the net/http response that was raised
      raise response.response    
    end
  end

  ...

メソッドから呼び出したときにベース URI が設定されません。どうすれば機能しますか?

役に立ちましたか?

解決

HTTPPartyでは、 base_uri です クラスメソッド これは内部オプションのハッシュを設定します。カスタム クラス メソッド内から動的に変更するには login 単にメソッドとして呼び出すことができます (変数のように割り当てるのではありません)。

たとえば、上記のコードを変更すると、次のように設定されます。 base_uri ご想像のとおり:

...
case game_name
  when "game1"
    # call it as a method
    self.base_uri "http://game1"
...

それが役に立てば幸い。

他のヒント

まだコメントできないので、Estanislau Trepat の回答の拡張をここに示します。

設定するには、 base_uri のために あなたのすべての電話, 、対応するクラスメソッドを呼び出します。

self.base_uri "http://api.yourdomain.com"

発送方法をご希望の場合は 別の URI への呼び出しは数回のみ 状態エラー (元の URI に戻すのを忘れる) を回避するには、次のヘルパーを使用できます。

def self.for_uri(uri)
  current_uri = self.base_uri
  self.base_uri uri
  yield
  self.base_uri current_uri
end

上記のヘルパーを使用すると、次のような他の URI への特定の呼び出しを行うことができます。

for_uri('https://api.anotheruri.com') do
  # your httparty calls to another URI
end

この質問が最初に尋ねられたときに実装されたかどうかはわかりませんが、設定またはオーバーライドしたい場合は :base_uri リクエストごとまたはインスタンスごとに、HTTParty リクエスト メソッド (:get、:post など) オプションを受け入れる クラスオプションをオーバーライドします。

したがって、OP の例では、次のようになります。

class Managementdb
  include HTTParty

  # If you wanted a default, class-level base_uri, set it here:
  base_uri "http://games"

  def self.login(game_name)
    base_uri =
      case game_name
      when "game1" then "http://game1"
      when "game2" then "http://game2"
      when "game3" then "http://game3"
      end

    # To override base_uri for an individual request, pass
    # it as an option:
    response = get "/login", base_uri: base_uri

    # ...
  end
end

他の回答で示唆されているように、クラスメソッドを動的に呼び出すと、次のbase_uriが変更されます。 全て これはおそらくあなたが望んでいることではありません。確かにスレッドセーフではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top