如何更优雅地动态调用命名空间下的Net::HTTP方法?
更简洁的Rails风格实现方案
用ActiveSupport的constantize替代const_get
Rails自带的ActiveSupport给String扩展了constantize方法,比Object.const_get写法更清爽,完全符合Rails风格:
req_method = "Net::HTTP::#{method.capitalize}".constantize
效果和你原来的写法一致,但代码更直观易读。
直接动态调用Net::HTTP实例的请求方法
如果已经通过Net::HTTP.start创建了连接实例,完全可以跳过常量查找这一步,直接用Ruby的send方法动态调用对应的请求方法(比如get、post):
# 假设http是已建立的Net::HTTP连接实例 response = http.send(method.downcase, '/target/path', request_body, request_headers)
这种写法更直接,省去了创建请求对象的步骤,代码更简洁,也是Rails里常用的动态调用方式。
用通用请求类构建请求
如果需要更灵活的控制,还可以直接用Net::HTTPGenericRequest这个通用类来构建请求,不用管具体的Get/Post子类:
req = Net::HTTPGenericRequest.new(method.upcase, true, true, '/target/path') req.body = request_body req['Content-Type'] = 'application/json' response = http.request(req)
这种方式彻底摆脱了对特定请求常量的依赖,适合需要统一处理多种请求方法的场景。
内容的提问来源于stack exchange,提问作者bubbaspaarx
相关产品推荐
相关产品推荐

