Создать несколько файлов XML на основе базы данных

Может кто-нибудь привести пример использования Builder для создания нескольких файлов XML из базы данных SQL. Я могу легко создать один, содержащий всю базу данных, как здесь...

def index
  respond_to do |format|
   format.xml { @rides = Rides.find(:all) }
  end
end

Это создаст файл с именем index.xml на основе созданного мной файла с именем index.xml.builder, который содержит следующий код

xml.instruct!
xml.rides do
@rides.each do |ride|
  xml.item("togive" => ride.togive, "totake" => ride.totake, "howlong" => ride.howlong,       "isoffer" => ride.isoffer, "id" => ride.id, "contact" => ride.contact)
 end
end

Вот единственные строки в моих маршрутах.

map.resources :rides
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

Это прекрасно работает, но как мне создать новый файл, который содержит последний элемент в Rides?

Спасибо

редактировать: изменено с format.rss на format.xml

1 ответ

Решение

Я не совсем уверен, чего вы пытаетесь достичь, но у вас мог бы быть другой метод в вашем контроллере, который возвращает последнюю поездку:

def last
  respond_to do |format| 
    format.xml { @last_ride = Rides.last } 
  end 
end 

А потом в представлении шаблона last.xml.builder Вы могли бы иметь что-то вроде:

xml.instruct! 
xml.rides do 
  xml.item("togive" => @last_ride.togive, "totake" => @last_ride.totake etc...) 
end

Если вы использовали этот подход, вам нужно изменить config/routes.rb файл, чтобы добавить новый маршрут сбора для list действие:

map.resources :rides, :collection => { :last => :get }

В качестве альтернативы вы можете просто сделать find вызов в пределах контроллера index метод условный, так что он выбирает все поездки или последнюю поездку в зависимости от ситуации. В этом случае вы должны быть в состоянии повторно использовать существующие index.xml.builder Посмотрите шаблон, потому что он просто выведет коллекцию, которая содержит только одну поездку.

Другие вопросы по тегам