【发布时间】:2016-08-31 20:36:14
【问题描述】:
我正在开发一个与后端第 3 方集成的 Rails 应用程序。为了快速概述,用户将在我们的 Web 界面中创建一个订单,这将保留一个延迟的作业。因此,该作业在 Web 上下文之外运行,并将向该第 3 方发送请求。第 3 方期望在请求正文中包含 XML 有效负载的 POST。
我目前正在使用 Faraday 来执行请求。我有一个看起来像这样的类:
class FooRequest
def response
connection.post("/foo", xml)
end
private
def xml
xml = Builder::XmlMarkup.new
xml.root do
xml.foo "something something"
end
xml.target!
end
def connection
@connection ||= Faraday.new(url: "http://example.org")
end
end
XML 实际上比这更大更复杂,所以我不想在这个类中构建 xml。我认为最好有某种模板。我要么想在 xml.builder 文件中使用 Builder,要么只在 erb 文件中使用原始 XML。不确定在这种情况下哪个最好以及如何最好地呈现模板。我知道 Rails 最近添加了在控制器上下文之外呈现视图的功能 (https://medium.com/evil-martians/new-feature-in-rails-5-render-views-outside-of-actions-2fc1181e86a8#.s344qg5ue),但我觉得该功能不是为这个用例构建的。我也知道还有其他模板语言,比如 Liquid,也许这更合适。
过去有没有人做过这种事情?有什么我想念的吗?
另外,如果我创建了一个模板文件,我应该把它放在/app/views 中吗?这不是我的 webapp 会呈现的视图,也许我应该有一个 /app/templates 目录?
PS:Rails 的to_xml 方法不够健壮,无法满足我的需求(我需要标签属性,并且不想用 ruby 哈希表示深度复杂的 XML 树)。
【问题讨论】:
标签: ruby-on-rails ruby xml templates faraday