2016-08-31 2 views
0

私はバックエンドのサードパーティと統合するためのレールアプリを開発中です。すばやく概要を確認するために、ユーザーはWebインターフェイスで注文を作成し、遅れた仕事を継続します。したがって、ジョブはWebコンテキスト外で実行され、このサードパーティに要求を送信します。第三者は、要求本体にXMLペイロードを含むPOSTが必要です。テンプレートで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を構築する必要はありません:私はこのようになりますクラスを持っています。私はテンプレートのいくつかの並べ替えを持つことが最良だと思う。私はxml.builderファイルでBuilderを使用するか、erbファイルに生のXMLを持っています。このコンテキストでは、どちらが最善であり、どのようにテンプレートをレンダリングするのがベストかはわかりません。レールが最近コントローラコンテキスト(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ツリーをルビーハッシュで表現したくありません)。

答えて

1

似たようなことをしました。私が見つけた最も簡単な方法は、分離した宝石に必要なXMLクラスを実装することでした(モデルフォルダのどこかにクラスを追加するだけです私のユースケースには意味がありました)。

これにはROXMLを使用しました。その後、簡単にroot.to_xml.to_sを呼び出して文字列をレンダリングすることができます。githubの例を参照してください。これは本当に簡単です。

+0

私はレンダリングする必要があったXMLの各タグのクラスを作成することに躊躇していましたが、コードは本当にすばらしいものになりました。ありがとう –

関連する問題