当我们使用rails generate scaffold的方式生成MVC的时候,rails会自己主动给我们生成一系列的文件,包含了怎样用json显示model的view。这样事实上默认了你的系统是一个CRUD的系统,可是我们知道RESTful不是CRUD。把model直接暴露出去不是一个非常好的选择。

rabl是一个DSL能够方便定制生成对象的显示信息的gem:https://github.com/nesquena/rabl

以下是详细的操作过程:

1.首先创建一个新的railsproject:

rails new rabl-app

2.在Gemfile中加入rabl的依赖:

gem 'rabl'

3.创建Model:

rails g model Blog title:string author:string content:text

4.迁移数据库:

rake db:migrate

5.创建controller:

在app/controllers下创建一个新的空文件blogs_controller.rb

内容例如以下:

class BlogsController < ApplicationController

   def index

      @blogs = Blog.all

   end



   def show

      @blog = Blog.find(params[:id])

end

end

能够使用stub数据用于測试:

@blog = Blog.new({:id => 3, :title => "good title", :author => "good author", :content => "good content"})

6.创建rabl相应的view:

在app/views下创建一个新的空目录blogs:

在app/views下创建两个新文件:index.json.rabl和show.json.rabl

show.json.rabl:

object @blog

attributes :id, :title, :author, :content

index.json.rabl:

collection @blogs



extends "blogs/show"

7.配置route

在routes.rb中:

Rails.application.routes.draw do

  resources :blogs

end

8.启动server

rails s

訪问:http://localhost:3000/blogs/3.json

得到结果:

{"blog":{"id":3,"title":"good title","author":"good author","content":"good content"}}

我们上面的样例仅仅是演示了怎样在rails中使用rabl,并非说上面的显示方法就是好的构造对象现实的方法,很多其它的能够看看:

https://github.com/nesquena/rabl

http://railscasts.com/episodes/322-rabl?

view=similar

Rails + rabl的更多相关文章

  1. 有意练习--Rails RESTful(一)

    书要反复提及<哪里有天才>在说,大多数所谓的天才是通过反复刻意练习获得. 当你的练习时间达到10000几个小时后,.你将成为该领域的专家. 近期在学习rails怎样实现RESTful We ...

  2. Rails sanitize

    The SanitizeHelper module provides a set of methods for scrubbing text of undesired HTML elements. T ...

  3. nginx中error_page没有生效(nginx+passenger+rails)

    应用部署方式为 nginx + passenger + rails 当我想要用nginx来默认处理400以上状态时,发现在rails返回respose之后,nginx不会再次执行error_page( ...

  4. Ruby on Rails 创建https应用

    1. 创建证书请求文件条件:私钥+证书签名请求+opensslyum install -y opensslmkdir /root/ssl/ && cd /root/ssl/openss ...

  5. Rails 5 开发进阶

    Rails 5 开发进阶:https://www.gitbook.com/book/kelby/rails-beginner-s-guide/details   cancan : http://blo ...

  6. rails程序文件名命名规范

    1 一般文件名是用小写单词加下划线分割,但类的名字用骆驼法.例如 sessions_controller.rb中定义SessionsController. 2 helpers内的文件为辅助类,定义了许 ...

  7. rails中的form_for

    1 form_for方法是ActionView::Helpers::FormHelper模块内的方法,所以可以在ActionView的实例中直接调用 2 from_for方法的原型为form_for( ...

  8. rails中的session

    学rails toturial的时候,第八章一直觉得有点没吃透,后来看了两篇rails关于session和cookies源码分析的文章,cookie原理与实现(rails篇) 和session原理与实 ...

  9. Ubuntu配置Ruby和Rails

    安装curl sudo apt-get install curl 安装RVM curl -L https://get.rvm.io | bash -s stable 通过RVM来安装Ruby rvm ...

随机推荐

  1. JAVA输出带BOM的UTF-8编码的文件

    当从http 的response输出CSV文件的时候,设置为utf8的时候默认是不带bom的,可是windows的Excel是使用bom来确认utf8编码的,全部须要把bom写到文件的开头. 微软在 ...

  2. ZooKeeper Recipes and Solutions

    原文地址:http://zookeeper.apache.org/doc/current/recipes.html 参考:https://zookeeper.apache.org/doc/trunk/ ...

  3. iOS菜鸟成长笔记(2)——网易彩票练习

    距离上一篇<第一个iOS应用>已经有一个多月了,今天来和大家一起学习和分享一下一个小练习<网易彩票> 首先我们向storyboard中拖入一个TabBarController和 ...

  4. go语言中在变量后加上接口是什么意思?

    如题刚刚开始学习go 语言有些不懂: a.Data = make(map[string]interface{}) 我认为它是在申请a.Data map为字符串类型的空间,那么它后面接一个空的inter ...

  5. 紫书 例题 10-29 UVa 1642(最优连续子序列)

    这类求最优连续子序列的题一般是枚举右端点,然后根据题目要求更新左端点, 一般是nlogn,右端点枚举是n,左端点是logn 难点在于如何更新左端点 用一些例子试一下可以发现 每次加进一个新元素的时候 ...

  6. 【转】CentOS下firefox安装flash说明

    http://www.cnblogs.com/lamper/archive/2013/01/16/2862254.htm CentOS下自带了firefox,但没有flash插件的,按它自己的提示安装 ...

  7. 积跬步,聚小流------Bootstrap学习记录(2)

    现阶段开启每一次新的征程,已然离不开"Hello World"的习惯仪式.这次自然也不例外.先来看下给出的官网给出的演示样例: 1.bootstrap官网提供的html基本模板代码 ...

  8. 《R实战》读书笔记一

    你仅仅要想处理数据,<R实战>这本书就能够助你一臂之力. <R实战>的目标是让你认识R,而且可以对数据进行操作.可视化和理解.该书包含4部分16个章节8个附录. 第一部分:入门 ...

  9. 遇到 Form 性能问题怎么办 performance issue

    性能问题是比較复杂的问题. 一般由performance team 负责, 可是常见的情况是, 我们 INV team 定义的 view 不好, 导致查询性能较差. 这个必须由产品组和 perform ...

  10. UITableView去掉最后切割线的一种方法

    UITableView以style:UITableViewStylePlain方式创建时.仅仅要有cell,就会有一条黑线 哪怕至于一个cell也会有,如图 在网上找了集中方法,都不好使,比方http ...