Sinatra将layout.erb中的所有视图包装在您放置的位置<%= yield%>在那个文件中。如果您只为浏览器提供html页面,这非常棒。但
我们正在编写一个应用程序,它还需要通过XML与Twilio交谈。挑战:我们的所有输出都是以<!DOCTYPE/html>
包裹的方式发出的。
我们设法通过在action.erb文件中指定layout:false来绕过layout.erb。
post '/incoming' do
content_type 'text/xml'
@message = "this is working"
erb :'/incoming.xml', layout: false
end
我确信有一个'更好'的方式让Sinatra提供xml内容,非常感谢你对此的帮助!
答案 0 :(得分:1)
你可以使用twilio-ruby gem https://github.com/twilio/twilio-ruby从你的动作中渲染出Twiml:
post '/incoming' do
response = Twilio::TwiML::Response.new do |r|
r.Say "This is working"
end
response.text
end
这将呈现twilio期待的正确的Twiml文档。
答案 1 :(得分:0)
如果我正确理解您的情况/问题,那么您正在寻找一种更简洁的方式来提供来自Sinatra的XML(在本例中为Twilio的TwiML)。如果是这种情况,我建议您查看Sinatra::Builder module。该模块允许您在路径中动态构建TwiML。如果您想使用模板化方法,它还支持模板。
可以在Builder's RubyForge page上找到Builder的完整文档。