Rails format.xml рендерит и передает несколько переменных - PullRequest
2 голосов
/ 11 апреля 2011

Типичное использование:

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @users }
end

И теперь я хочу также передать строку с именем "teststring".

Я видел ссылку на использование

:local => {:users => @users, :another => @another}

Но я не знаю, как объединить их вместе.Я просто не видел все вместе.Не так много документации, чтобы действительно объяснить: xml в этой строке.И я не знаю, смогу ли я справиться со строкой с помощью: teststring => teststring?

И, наконец, как мне с ними обращаться в моем index.html.erb теперь, когда у меня несколько переменных?Они передаются с тем же именем из команды рендера?

Спасибо.

1 Ответ

11 голосов
/ 11 апреля 2011

Если вы хотите отобразить пользовательский XML, вам нужно создать файл index.xml.erb в соответствующем каталоге представления для контроллера. Он работает так же, как любой HTML-шаблон, который вы используете, тогда:

app/controllers/home_controller.rb:

def index
    @users = ...
    @another = "Hello world!"

    # this `respond_to` block isn't necessary in this case -
    # Rails will detect the index.xml.erb file and render it
    # automatically for requests for XML
    respond_to do |format|
        format.html # index.html.erb
        format.xml # index.xml.erb
    end
end

app/views/home/index.xml.erb

<?xml version="1.0" encoding="UTF-8"?>
<document>
    <%= @users.to_xml # serialize the @users variable %>
    <extra_string><%= @another %></extra_string>
</document>

(Вы можете прочитать о методе to_xml ActiveRecord здесь .)

...