Создать несколько файлов 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 }
- Это позволит вам получить доступ к маршруту, используя http://localhost:3000/rides/last.xml
В качестве альтернативы вы можете просто сделать find
вызов в пределах контроллера index
метод условный, так что он выбирает все поездки или последнюю поездку в зависимости от ситуации. В этом случае вы должны быть в состоянии повторно использовать существующие index.xml.builder
Посмотрите шаблон, потому что он просто выведет коллекцию, которая содержит только одну поездку.