Ruby on rails rails:针对不同用户的不同方法

Ruby on rails rails:针对不同用户的不同方法,ruby-on-rails,api,httparty,Ruby On Rails,Api,Httparty,我的用户模型上有一个位置字段,有两个可能的值,西班牙和法国(将来可能更多)。我需要为每个用户调用API,但根据用户的位置调用不同的API(另外,以不同的方式解析响应)。我不知道解决这个问题的最好办法是什么 我的代码现在大致是这样的: class Api::Foobar include HTTParty base_uri 'http://demo.foobar.es/vweb/xml' GLOBAL_OPTIONS = {edad: 'anciano', farmacovigilan

我的用户模型上有一个位置字段,有两个可能的值,西班牙和法国(将来可能更多)。我需要为每个用户调用API,但根据用户的位置调用不同的API(另外,以不同的方式解析响应)。我不知道解决这个问题的最好办法是什么

我的代码现在大致是这样的:

class Api::Foobar
  include HTTParty
  base_uri 'http://demo.foobar.es/vweb/xml'

  GLOBAL_OPTIONS = {edad: 'anciano', farmacovigilancia: false, deportista: false, administrativas: false}

  def initialize(user)
    @user = user
  end

  def contraindications
    self.class.get("/ws_patient/alertas", query: GLOBAL_OPTIONS.merge(user_options) )
  end

  def self.medications_by_name(name)
    response = get("/ws_drug/SearchByName", query: {value: name} )
    response['object']['drug_set']['drug']
  end

  .....

end
我正在做的事情像是
Api::Foobar.drughts\u by\u name('asp')
Api::Foobar.new(User.first)。禁忌症

我想构建一个抽象层,允许我为每个用户调用相同的方法,并根据用户位置自动选择合适的类/模块/api。谁能给我指出正确的方向吗?在构建这样的抽象层时,可能需要一些最佳实践

=============编辑==========

最后,我将这些类命名为另一个级别,并将此方法添加到用户类中:

  def foobar_api
    if !self.location.nil?
      Object.qualified_const_get("Api::Foobar::#{self.location.capitalize}").new(self)
    else
      Api::Foobar::Spain.new(self)
    end
  end
现在我正在调用
User.first.foobar\u api.禁忌症


如果这是个好主意,有人能评论一下吗?或者,如果有更好的方法,则在接受用户对象的类中使用perform方法。根据用户位置值,可以在内部方法中使用一种。

我见过
perform
run
方法,但从未编写过。它有什么作用?我应该如何搜索来阅读更多关于它的信息?它不一定是一个PERFORM方法。你可以在这个要点()中使用类似的内容。我假设“按名称用药”方法将国家名称作为参数哦,我理解。该位置存储在用户记录上。这个API类中还有大约10-15个方法,我省略了。我希望能够这样做
Api::Foobar.new(User.first).禁忌症
,然后根据用户的国家,它将从
Api::Foobar::西班牙
Api::Foobar::France
类中调用
禁忌症
方法(或任何其他方法)。