[Rails学习之路]Rails文件结构与路由
约定优于配置和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。
在控制器中有index
、show
、new
、edit
、create
、update
、destroy
等方法,这些方法叫做控制器的动作。
在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
为后缀的index
、new
、show
、edit
等文件。这些文件都和控制器的动作相关联。把它们关联在一起的就是Rails的路由设置config/routes.rb
。
这里面只有一条规则,
resources :people
创建了people这个资源。Rails使用资源来实现REST。它实际上等价于下面的几条规则:
或者借用Ruby on Rails 实战圣经的这个表格更好认识(原图中资源为events):
[Rails学习之路]Rails文件结构与路由的更多相关文章
- [Rails学习之路]Rails路由配置
如果是使用Rails的默认约定,那么几乎是零配置. 但有些时候,我们可能不得不(或者更喜欢)进行一些特殊的配置. 其实Rails在路由功能中也有很丰富的配置选项. routes.rb文件中靠前的规则优 ...
- 开始了大概三四天的Rails学习之路
最近因为一位极光推送朋友,我开始了大概三四天的Rails学习之路,最终达到的水平是可以比较轻松地做出大部分功能,然后自我感觉可以自如地按照Rails的设计思想去思考.由于编程的日益流行,我结识了越来越 ...
- [Rails学习之路]初识Ruby(一)
Ruby是一门动态的.强类型的.纯面向对象的编程语言.它和Python非常相似,但比Python面向对象更加彻底.使用更加灵活.语法更加复杂.也更为有趣. 抛开做事情到底应该有多少种方法这个问题,我相 ...
- [Rails学习之路]初识Ruby(二)
继续上次Ruby的学习.接下来就到了Ruby的方法. Ruby的方法与Python仍然很像.使用def定义,可以使用undef取消定义. 在Ruby中,经常可以看见方法后面跟有"?" ...
- WPF学习之路(四)路由
路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供 ...
- Rails学习:create操作 局部模板
学习Ruby on Rails实战真经 里面说rails4使用了strong parameters, 所以代码这么写:注意不是Event.new(params[:event])了,而是参数是函数返回值 ...
- 【Ruby on Rails学习二】在线学习资料的整理
由于工作任务重,时间紧,没有太多学习的时间,大致找了些在线学习资料,这里做个整理,希望对同样准备学习的朋友有帮助 在线文档类: Ruby on Rails 实战圣经 使用 Rails 4.2 及 R ...
- rails学习笔记: rake db 相关命令
rails学习笔记: rake db 命令行 rake db:*****script/generate model task name:string priority:integer script/g ...
- springboot 学习之路 1(简单入门)
目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...
随机推荐
- ASP.NET MVC 小牛之旅4:ASP.NET MVC的运行生命周期
ASP.NET MVC的运行生命周期大致分成三大过程:(1)网址路由对比. (2)运行Controller与Action. (3)运行View并回传结果. 4.1网址路由对比 当iis收到http请求 ...
- Docker 企业级镜像仓库 Harbor 的搭建与维护
目录 一.什么是 Harbor 二.Harbor 安装 2.1.Harbor 安装环境 2.2.Harbor安装 2.3 配置HTTPS 三.Harbor 的使用 3.1.登录Harbor并使用 3. ...
- sqlachemy知识点
mysql语句 1.GROUP BY基本语法格式: GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...
- java IO流部分知识点
IO流部分 IO流常用的有:字符流.字节流.缓冲流.序列化流.RandomAccessFile类等 1.字节流 FileInputStream/FileOutputStream BufferedInp ...
- smix到底是个啥?Perl的正则表达式匹配模式
最近在研究一个perl项目,临时学习了一下perl语法,强行看项目源码.因为总是见到各种正则表达式后面接smxi之类,虽然知道是匹配模式,但脑子里毫无概念.所以特地去学习了一下. 以上为背景. Per ...
- springBoot2.0 配置 mybatis+mybatisPlus+redis
一.Idea新建springBoot项目 next到完成,然后修改使用自己的maven 等待下载包 二.pom.xml文件 <?xml version="1.0" encod ...
- Luogu P4901 排队 fib数列+树状数组+倍增
这题让我升华..还好只重构了一遍 首先我们发现:$n$较小时,整个队伍的形态 跟 $n$ 比较大时的局部是一样的 所以我们预处理出这个队伍的形态,和每一行每个位置的质因子个数的前缀和,$O(nlogn ...
- HDU6438:Buy and Resell(贪心+数据结构)
题意 : 给出一些数.你可以从左到右对这些数进行三种操作花费 Ai 买入东西.以 Ai 价格卖出你当前有的东西.或者什么都不做.现在问你可以获取的最大利益是多少 分析:对每一个元素产生的贡献可以先计算 ...
- Chapter13
package scala /** * Created by EX-CHENZECHAO001 on 2018-04-04. */class Chapter13 { // 13 集合 // 所有的集合 ...
- IE浏览器与非IE浏览器JS日期兼容性问题处理
执行语句 console.log(new Date("2017-07-04 18:40").getTime()); 在IE浏览器中打印出:NAN 在非IE浏览器中打印出:14991 ...