У вас есть три варианта.
Параметр 1 предназначен для явного отображения автоматически сгенерированного XML.
render :xml => @object
, который будет вызывать @ object.to_xml для вас. Вы можете настроить вывод с параметрами:
render :xml => @object.to_xml(:except => [:private1, :private2], :include => [:associated_class])
Это очень быстро и просто. Это будет работать довольно хорошо, если вам не нужен жесткий контроль над выводом. Представление XML контролируется в контроллере, а не в представлении, что несколько грязно, но не так уж плохо, если вы не начинаете фантазировать.
Опция 2 заключается в создании шаблонов с именем .xml.erb вместо обычного .html.erb. Это просто файлы XML с нормальной разметкой ERB. Если приходит запрос на URL с XML-файлом в конце, поведение по умолчанию (с использованием обычных лесов в контроллере) состоит в отображении этих шаблонов вместо HTML-шаблонов). Часто строительные леса имеют блок вроде:
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @object.to_xml }
end
В этом случае (при условии, что вы также хотите разрешить HTML) вы захотите удалить блок {} в строке format.xml, чтобы он вернулся к шаблону по умолчанию.
Вариант 3 - написать свой собственный объект -> отображение XML, используя что-то вроде Builder (который очень очень удобен и включен в Rails). Внезапно ваша модель беспокоится о своих взглядах.
Я бы предложил использовать опцию 1 , пока не начнутся проблемы (иногда, казалось бы, мягкое изменение приведет к изменению вывода XML - возможно, переупорядочив теги), а затем переключится на вариант 2. Наличие этих XML файлы там очень ясно дают понять, что именно отображается, так же, как файлы HTML. Вариант 3 работает, но вы смешиваете логику (остальную часть вашей модели) с презентацией.