约定优于配置RESTful是Ruby on Rails十分推崇的哲学。在一个默认的RESTful的Rails项目中,使用资源HTTP动词来帮助组织项目。

假如有一个使用scaffold创建的Rails项目,它的创建代码像下面这样:

rails new hello_rails
cd hello_rails/
rails generate scaffold person name:string

执行之后得到的文件结构如下(原文来自Ruby on Rails 指南):

  • app/ 存放程序的控制器、模型、视图、帮助方法、邮件和静态资源文件。本文主要关注的是这个文件夹。
  • bin/ 存放运行程序的 rails 脚本,以及其他用来部署或运行程序的脚本。
  • config/ 设置程序的路由,数据库等。详情参阅“设置 Rails 程序”一文。
  • config.ru 基于 Rack 服务器的程序设置,用来启动程序。
  • db/ 存放当前数据库的模式,以及数据库迁移文件。
  • Gemfile, Gemfile.lock 这两个文件用来指定程序所需的 gem 依赖件,用于 Bundler gem。关于 Bundler 的详细介绍,请访问 Bundler 官网。
  • lib/ 程序的扩展模块。
  • log/ 程序的日志文件。
  • public/ 唯一对外开放的文件夹,存放静态文件和编译后的资源文件。
  • Rakefile 保存并加载可在命令行中执行的任务。任务在 Rails 的各组件中定义。如果想添加自己的任务,不要修改这个文件,把任务保存在 lib/tasks 文件夹中。

    README.rdoc 程序的简单说明。你应该修改这个文件,告诉其他人这个程序的作用,如何安装等。
  • test/ 单元测试,固件等测试用文件。详情参阅“测试 Rails 程序”一文。
  • tmp/ 临时文件,例如缓存,PID,会话文件。
  • vendor/ 存放第三方代码。经常用来放第三方 gem。

项目中最常用的是app/这个目录,在它下面又有MVC模型的controllers/views/models/等几个子目录。

controllers/下面有people_controller.rb文件,其中的类叫做PeopleController。Rails约定,控制器中的命名默认为复数,如果你没有在路由中指定其他的控制器的话。我们创建的模型叫person,所以它的复数就是people。

在控制器中有indexshowneweditcreateupdatedestroy等方法,这些方法叫做控制器的动作。

models/下面有person.rb。Rails约定模型名默认是单数。打开这个文件后,里面却什么都没有。

class Person < ActiveRecord::Base
end

这是因为在Rails中,模型的内容是随着数据库中对应的表变化的,这一点和其他的ORM略有不同。如果需要修改模型的内容,只需修改数据库即可。而修改数据库并不需要手工去做,Rails中有迁移(migration)这个机制可以帮助我们实现。好处一是我们的修改是数据库无关的;二是可以方便做版本控制。

打开db/migrate/*_create_people.rb。这段代码创建了一张people表:

class CreatePeople < ActiveRecord::Migration
def change
create_table :people do |t|
t.string :name
t.timestamps
end
end
end

我们执行bin/rails db:migrate命名来执行迁移,这时Rails在后台建立了people表,使用的是config/database.yaml中设置的数据库,默认就是SQLite。

最后看一下views/目录。在它下面除了和布局相关的layouts/,就是people/目录。其中有以.html.erb为后缀的indexnewshowedit等文件。这些文件都和控制器的动作相关联。把它们关联在一起的就是Rails的路由设置config/routes.rb

这里面只有一条规则,

resources :people

创建了people这个资源。Rails使用资源来实现REST。它实际上等价于下面的几条规则:

或者借用Ruby on Rails 实战圣经的这个表格更好认识(原图中资源为events):

[Rails学习之路]Rails文件结构与路由的更多相关文章

  1. [Rails学习之路]Rails路由配置

    如果是使用Rails的默认约定,那么几乎是零配置. 但有些时候,我们可能不得不(或者更喜欢)进行一些特殊的配置. 其实Rails在路由功能中也有很丰富的配置选项. routes.rb文件中靠前的规则优 ...

  2. 开始了大概三四天的Rails学习之路

    最近因为一位极光推送朋友,我开始了大概三四天的Rails学习之路,最终达到的水平是可以比较轻松地做出大部分功能,然后自我感觉可以自如地按照Rails的设计思想去思考.由于编程的日益流行,我结识了越来越 ...

  3. [Rails学习之路]初识Ruby(一)

    Ruby是一门动态的.强类型的.纯面向对象的编程语言.它和Python非常相似,但比Python面向对象更加彻底.使用更加灵活.语法更加复杂.也更为有趣. 抛开做事情到底应该有多少种方法这个问题,我相 ...

  4. [Rails学习之路]初识Ruby(二)

    继续上次Ruby的学习.接下来就到了Ruby的方法. Ruby的方法与Python仍然很像.使用def定义,可以使用undef取消定义. 在Ruby中,经常可以看见方法后面跟有"?" ...

  5. WPF学习之路(四)路由

    路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供 ...

  6. Rails学习:create操作 局部模板

    学习Ruby on Rails实战真经 里面说rails4使用了strong parameters, 所以代码这么写:注意不是Event.new(params[:event])了,而是参数是函数返回值 ...

  7. 【Ruby on Rails学习二】在线学习资料的整理

    由于工作任务重,时间紧,没有太多学习的时间,大致找了些在线学习资料,这里做个整理,希望对同样准备学习的朋友有帮助 在线文档类: Ruby on Rails 实战圣经  使用 Rails 4.2 及 R ...

  8. rails学习笔记: rake db 相关命令

    rails学习笔记: rake db 命令行 rake db:*****script/generate model task name:string priority:integer script/g ...

  9. springboot 学习之路 1(简单入门)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

随机推荐

  1. haml

    创建: 2019/05/23 文档: http://haml.info/docs/yardoc/file.REFERENCE.html 安装  安装 gem "haml"     ...

  2. hdu 2147 kiki's game(巴什博弈)

    kiki's game HDU - 2147 题意:一个n*m的表格,起始位置为右上角,目标位置为左下角,甲先开始走,走的规则是可以向左,向下或者向左下(对顶的)走一格.谁先走到目标位置谁就胜利.在甲 ...

  3. java整理(一)

    1.方法重载:方法名称相同,参数的类型或个数不同.但是返回值类型不同,不是方法重载. 2.引用数据类型:数组,类,接口.内存地址分为两类,栈内存和对内存.栈内存保存的是对内存的地址,简单理解就是保存了 ...

  4. thinkphp5控制器访问转换问题

    假设定义了HelloWorld控制器 url访问地址就是:http://localhost/index.php/index/hello_world,与此同时view目录下的模板文件夹要命名为hello ...

  5. Oracle中慎用Like等通配符

    Like关键字,从技术上来说,是一个非常友善的通配符.利用这个通配符,我们可以实现很多模糊查询.如现在在一个人事档案系统中,用户想知道身份证号码以“339005”开头的人事信息,此时,就可以利用Lik ...

  6. POJ1033 Defragment

    题目来源:http://poj.org/problem?id=1033 题目大意: 某操作系统的文件系统中,所有的磁盘空间被分为N个大小相等的cluster,编号1至N.每个文件占用一个或多个clus ...

  7. 项目 08 WebSocket

    项目班 08 WebSocket app.py 更新 添加两个路由 handlers = [ ('/', main.IndexHandler), ('/explore', main.ExploreHa ...

  8. POJ1442 Black Box 堆

    用大根堆和小根堆分别存放前$i-1$大的元素前$k-i$小的元素. 将当前序列的元素压入最小堆,如果最小堆的最小数大于最大堆的最大数则进行交换,保证最大堆中的所有数小于最小堆. 因为$i$值每进行一次 ...

  9. MYSQL性能优化之Mysql数据库监控

    监控对象 数据库可用性监控数据库进程或是端口存在并不意味着数据库就是可用的 也就是说登陆服务器,并且能正确执行mysql命令 数据库性能 QPS和DPS并发线程数量(同时执行sql语句的数量,不是连接 ...

  10. POJ 3321 Apple Tree DFS序 + 树状数组

    多次修改一棵树节点的值,或者询问当前这个节点的子树所有节点权值总和. 首先预处理出DFS序L[i]和R[i] 把问题转化为区间查询总和问题.单点修改,区间查询,树状数组即可. 注意修改的时候也要按照d ...