Rails简明实用入门指南

Ruby请参考我写的简明Ruby系列:Ruby简明入门和提高

前言

本指南定位为《rails官方指南》的导读,是为初学者写的,本书提供概要,细节请查阅官方指南。

软件环境

rails 4.2

ruby 2.0

如何阅读

可以先尝试“一小时热身”,有兴趣的话可继续选学基础部分。

也许你关心需要多少时间学会,我给一个参考时间,请注意我是说的参考时间,入门一小时就够了,学习一个完整项目的话大概两个月吧,累计三个项目也就是六个月,可以达到中级水平吧。

另外,可以参考台湾网友xdite的内容丰富的免费入门课程Rails 101

一小时热身

安装的烦恼

本来rails的安装是很简单的,不过国内的网络环境让rails开发变得更困难了,目前似乎也没什么好的办法。

开始安装

假设ruby已经安装好了(推荐rvm安装管理ruby,不熟悉的话可以去ruby-china论坛的wiki找),基本的安装本来非常简单

bundle config 'mirror.https://rubygems.org' 'https://ruby.taobao.org' #配置为淘宝源
gem install rails -V  #-V显示详细,可以不要

接下来生成一个简单的项目

rails new rails-rsg

接下来bundle,/Gemfile中列出了所有用到的gem,bundle就是一次安装好这些gem。

cd rails-rsg
bundle install -V  #-V显示详细,可以不要

顺利的话,会在数分钟内安装好吧。如果不行的话,可能要换淘宝的安装源,或者vpn。

实验

这个热身实验的目的是提供一些感性认识先,大部分同学都不喜欢看理论的。

生成一个简单的博客的post。

rails g scaffold Blog title:string body:text

以上命令会生成一些建立数据表的程序,后续数据库部分会详细解释。

接下来,执行生成的建立数据表程序

rake db:migrate

顺利的话,数据表就建好了,默认是用sqlite3数据库,很简单实用。

最后一步,启动服务器。

rails s

浏览器就可以访问了。

http://localhost:3000/blogs

可以用浏览器操作下,有一些感性认识。

浏览器输入的网址是如何对应到程序的呢,这就是所谓的路由,下面看一下标准路由,如果没做过web开发的话,一开始可能看不太明白,有个印象就好了,Prefix就是路由名前缀,后续视图中会用到,比如blogs_path。

后面的路由部分会进一步学习。

Rails简明实用入门指南

基础

rails的设计原则

主要有两条:

  • 不重复原则 DRY
  • 惯例优于配置原则 CoC

不重复也就是简洁的意思吧,为不同的任务设计了DSL(领域特定语言)。
惯例原则可以减轻程序员的负担。

随着学习的深入,可以体会这两条原则。

常用配置文件

/Gemfile 
/config/database.yml
/config/routes.rb

名字就能说明吧,就不详细解释了。热身中的路由就是用routes.rb生成的。

resources :blogs

这一行就产生了7个标准路由,非常简洁,也就是rails被称为web DSL的原因吧。

路由

参考热身实验的图,我以blog这个路由名为例,它是get方法,uri的写法是/blogs/1.html。 :id, :format是ruby的符号的写法。(.:format)表示可以省略这部分,最后对应控制器BlogsController的方法show。

基本路由是7个,update有两种,共计8个。

更复杂一点的的有,嵌套路由,还有member,collection路由。都不复杂,查阅一下就知道了。

实验:验证路由

rails c
Rails.application.routes.recognize_path "http://localhost:3000/users/11"

可以验证任何路由,对应哪个控制器。

查错

raise @order.inspect

这个写法非常方便直观,浏览器就可以看,基本不用看终端的不太友好的黑屏幕了。

gem better_errors 可以改善默认的出错提示

gem byebug 可以设置断点

数据库

这几条是最常用的数据库相关的rake命令。

rake db:drop:all
rake db:create
rake db:migrate
rake db:seed

当需要修改数据表的时候,使用下面的命令,生成一个文件

rails g migration NameOfAny

在该文件中写上代码后(具体写法请查阅),然后运行就可以了。

rake db:migrate

mysql数据库需要gem mysql2

rake

据说rails 5将不再用rake了。

如下命令列出所有task

rake -T

可以自己写task,task前加上desc "description",就会出现在task列表中了。

控制器

紧接着路由的就是控制器了。可以用命令生成:

rails g controller Samples

模型

命令生成model

rails g model Sample title:string

这个会同时生成数据表迁移文件,请参考数据库部分

部署

有两个选择,Capistrano和Mina,我用过前一种。据说后一种更简单些。
部署可以完成一些自动任务,比如数据库修改,这个是php用的ftp方式做不到的。

部署是相对复杂的话题,这里就不深入了。

常用gem

一篇不错的来自prograils的对gem的介绍,英文版

常用开发工具

基本工具

  • pry

pry有很多优点,比如彩色,实用命令 ls String等。
可先单独用,熟悉后可加到rails中,需要在Gemfile中加pry, pry-rails两个gem。

Chrome插件

  • postman
  • Mysql Admin

网络资源

初学的两大难点

我觉得路由和model关系是两大难点,可重点学习下。

路由相对容易实验不同写法的效果。
model的关系包括has_one, has_many, belongs_to等。请参考官方指南。可以在rails console中实验。

视图我起初也觉得难,后来发现是因为路由没理解清楚的缘故。

传统的web开发

视图

可以看看/app/views目录的文件,结合那个路由来理解。

例如blogs_path, 这个方法是根据路由自动生成的,对应还有个blogs_url,区别就是url方法带有http:协议。

Assets

这个主要是为了解决引用js、css等文件慢的问题,多个文件合并为单一文件。不过在解决的同时也带来了新的复杂性问题。

开发阶段,直接引用/app/assets,debug打开的话,页面会引用独立的文件。部署阶段,需要rake assets:precompile预编译,生成到public下。

gem quiet_assets可以关闭终端上的相关显示。

API开发

手机开发就不用视图了,反而简单了。

JSON

简单的这样就可以了。

render json: { blogs: @blogs }

API文档

我目前就是用markdown写的,比较灵活,不过效果就一般。有一些流行的方案,目前还没用到。

相关推荐