Создать несколько файлов XML на основе базы данных - PullRequest
1 голос
/ 02 декабря 2009

Может ли кто-нибудь привести пример использования 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

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

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

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

Спасибо

edit: изменен с format.rss на format.xml

1 Ответ

1 голос
/ 02 декабря 2009

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

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, поскольку он будет просто выводить коллекцию, которая содержит только одну поездку.

...