rails3 数据格式

在Rails3中,增加JSON格式数据输出非常方便,只需在Controller中稍作修改即可。一种做法是在controller的开始处添加respond_to :json,然后使用respond_with响应请求。举例:假定有模型:书(book),有两个字段:书名(name)和作者名(author),controller为BooksController,将其index方法修改为(假定在index方法中输出JSON数据):

[ruby] view plain copy
  1. class BooksController < ApplicationController  
  2.   // 支持html, xml ,json  
  3.   respond_to :html:xml:json  
  4.   def index  
  5.     @books = Books.all  
  6.     respond_with @books  
  7.   end  
  8.   // 其它方法忽略  
  9.   ...  
  10. end  
 

此时启动服务后(执行rails s),访问地址:http://localhost:3000/books/index.json将返回类似以下格式的数据:

[ruby] view plain copy
  1. [  
  2. "book":{"id":1,"title""BookA","author":"Author1"},  
  3. "book":{"id":2,"title""BookB","author":"Author2"},  
  4. "book":{"id":3,"title""BookC","author":"Author3"}  
  5. ]  

某些情况下我们需要改变JSON输出格式,比如:需要把数以万计的记录缓存到客户端的localStorage或local database,去掉数据类型名称book以及字段名称id,name,author,将大大减小数据尺寸。如何改变这种格式输出呢?比如,输出为以下的数组格式:

[ruby] view plain copy
  1. [  
  2. ["1","BookA","Author1"],  
  3. ["2","BookB","Author2"],  
  4. ["3","BookC","Author3"]  
  5. ]  

一行代码足矣。编辑文件app/views/books/index.json.erb,填入以下内容:

[ruby] view plain copy
  1. [<%= raw @books.map { |b| '["' + "#{b.id}" + '","' + "#{b.name}" + '","'"#{b.author}" + '"]' }.join(',') %>]  

另一种有稍微改进的写法:

[ruby] view plain copy
  1. [<%= raw @books.map { |b| %{["#{b.id}","#{b.name}","#{b.value}"]} }.join(',') %>]

原文: http://blog.csdn.net/dyw/article/details/6202122



附:

以下是查看depot app中users列表中的数据

http://localhost:3000/users/11.xml(对应与format.xml)

rails3 数据格式_第1张图片

http://localhost:3000/users/11.json(对应与format.json)

{"created_at":"2012-06-02T08:44:33Z",
  "hashed_password":"1cc36db13392bcb9d4a418484947b85a97d2a315",
  "id":11,"name":"zhenjun",
  "salt":"-6194495880.970575953948593",
  "updated_at":"2012-06-02T08:44:33Z"}

http://localhost:3000/users/11.html(对应与format.html)

 一般的网页风格


那怎么使用这些格式的数据呢?在view下面创建相应格式的模板,比如xxx.html.erb,xxx.js.erb等



你可能感兴趣的:(html,json,database,Ruby,Rails,books)