Ruby on rails rails:针对不同用户的不同方法
我的用户模型上有一个位置字段,有两个可能的值,西班牙和法国(将来可能更多)。我需要为每个用户调用API,但根据用户的位置调用不同的API(另外,以不同的方式解析响应)。我不知道解决这个问题的最好办法是什么 我的代码现在大致是这样的: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
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
类中调用禁忌症
方法(或任何其他方法)。