基于数据库生成多个XML文件

时间:2009-12-02 04:10:43

标签: ruby-on-rails xml ruby xml-builder

有人可以提供使用Builder从SQL数据库创建多个XML文件的示例。我可以轻松地创建一个包含整个数据库的文件,如此处...

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

这将根据我创建的名为index.xml.builder的文件创建一个名为index.xml的文件,该文件包含以下代码

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

以下是我的routes.rb

中的唯一行
map.resources :rides
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

这很好用,但是如何创建一个包含Rides中最后一个元素的新文件?

由于

编辑:从format.rss更改为format.xml

1 个答案:

答案 0 :(得分: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操作添加新的collection route

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

或者,您可以简单地在控制器的find方法中调用index调用条件,以便它根据需要获取所有游乐设施或最后一次游览。在这种情况下,您应该能够重用现有的index.xml.builder视图模板,因为它只会输出恰好只包含一次骑行的集合。