У меня возникла проблема рендеринга XML в теле ответа запроса в приложении Rails 4. В приведенном ниже примере тело ответа пустое. Я поместил отладчик в шаблон, поэтому я знаю, что он проходит через него, но ничего не выводит.Rails XML-построитель не рендеринга
Я создал приложение простых рельсов, чтобы продемонстрировать проблему, с которой я использую построитель для возврата xml. Может ли кто-нибудь указать мне (возможно, тупому) проблему с этим примером?
Вот контроллер, шаблон, и испытания:
Контроллеры/bars_controller.rb
require 'builder'
class BarsController < ApplicationController
before_action :set_bar, only: [:show]
# GET /bars/1
# GET /bars/1.json
def show
@xml = Builder::XmlMarkup.new
render template: 'bars/show.xml.builder', formats: [:xml]
end
private
# Use callbacks to share common setup or constraints between actions.
def set_bar
@bar = Bar.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def bar_params
params.require(:bar).permit(:foo, :bar)
end
end
/views/bars/show.xml.builder
@xml.instruct!
@xml.bar do
@xml.foo(@bar.foo)
@xml.bar(@bar.bar)
end
/тест/контроллеры/bars_controller_test.rb
require 'test_helper'
class BarsControllerTest < ActionController::TestCase
setup do
@bar = bars(:one)
end
test "should show bar" do
get :show, id: @bar
assert_response :success
assert_match "<bar>", response.body
end
end
сеанс отладки
1: @xml.instruct!
2: binding.pry
=> 3: @xml.bar do
4: @xml.foo(@bar.foo)
5: @xml.bar(@bar.bar)
6: end
[2] pry(#<#<Class:0x007fc669e9f610>>)> @xml.bar do
[2] pry(#<#<Class:0x007fc669e9f610>>)* @xml.foo(@bar.foo)
[2] pry(#<#<Class:0x007fc669e9f610>>)* @xml.bar(@bar.bar)
[2] pry(#<#<Class:0x007fc669e9f610>>)* end
=> "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bar><foo>MyString</foo><bar>MyString</bar></bar>"
ли компания вы запрашиваете в тесте существуют в БД? –
Да. Тест создает объект, а затем отображает его. Если я отлаживаю шаблон, я могу отобразить xml просто отлично вручную в сеансе отладки. Однако он не попадает в ответ. –