سؤال

أحاول تمرير معلمة إلى a 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 الأساسي عندما أستدعيه من إحدى الطرق، كيف يمكنني تشغيل ذلك؟

هل كانت مفيدة؟

المحلول

في HTTParty، base_uri هو طريقة الطبقة الذي يحدد تجزئة الخيارات الداخلية.لتغييره ديناميكيًا من داخل طريقة الفصل المخصصة الخاصة بك login يمكنك فقط تسميتها كطريقة (وليس تعيينها كما لو كانت متغيرًا).

على سبيل المثال، تغيير التعليمات البرمجية الخاصة بك أعلاه، يجب تعيين هذا base_uri كما تتوقع:

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

نأمل أن يساعد.

نصائح أخرى

لا أستطيع التعليق بعد، لذا إليك امتدادًا لإجابة إستانيسلاو تريبات.

لتعيين 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

أنا لست متأكدا من تنفيذها عند طلب هذا السؤال لأول مرة، ولكن إذا كنت ترغب في تعيين أو تجاوز GransodicetagCode على أساس لكل طلب أو على أساس كل حالة، فإن طرق طلب HTTParty (: GET،: النشر، إلخ) قبول الخيارات لتجاوز خيارات الفئة.

حتى مثال على المرجع، يمكن أن تبدو مثل هذا: giveacodicetagpre.

استدعاء طريقة الفصل ديناميكيا، كما هو مقترح في بعض الإجابات الأخرى، وتغيير base_uri لطلبات جميع ، والتي ربما لا تكون ما تريد.انها بالتأكيد ليست آمنة الخيط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top