Я работаю над приложением rails, которое интегрируется с сторонней стороной на бэкэнд. Чтобы дать краткий обзор, пользователь создаст заказ в нашем веб-интерфейсе и будет продолжать работу с задержкой. Таким образом, работа выполняется за пределами веб-контекста и отправляет запрос этой третьей стороне. Третья сторона ожидает POST с полезной нагрузкой XML в теле запроса.Создайте полезную нагрузку запроса XML с шаблоном в рельсах
В настоящее время я использую Фарадей для выполнения запроса. У меня есть класс, который выглядит примерно так:
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 в этом классе. Я думаю, что иметь какой-то шаблон лучше. Я хотел бы использовать Builder в файле xml.builder
или просто иметь необработанный XML в файле erb. Не уверен, что лучше всего и как лучше всего сделать шаблон в этом контексте. Я знаю, что рельсы недавно добавили возможность визуализации представлений вне контекста контроллера (https://medium.com/evil-martians/new-feature-in-rails-5-render-views-outside-of-actions-2fc1181e86a8#.s344qg5ue), но я чувствую, что эта функция не была построена для этого варианта использования. Я также знаю, что есть другие шаблонные языки, такие как Liquid, и, возможно, это лучше подходит.
Неужели кто-нибудь делал подобные вещи в прошлом? Есть что-то, что мне не хватает? Кроме того, если я создаю файл шаблона, я должен положить его в /app/views
? Это не мнение, что мой webapp будет делать, может быть, у меня должен быть /app/templates
dir?
PS: Метод Rails to_xml
не достаточно прочен для того, что я хочу (мне нужны атрибуты тегов, и я не хочу представлять глубокое сложное дерево XML с хэш-рубином).
Я был немного нерешительным, чтобы создать класс для каждого тега в XML, который мне нужно было визуализировать, но код оказался действительно замечательным. благодаря –