前言

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

软件环境

rails 4.2
ruby 2.0

如何阅读

可以先尝试“一小时热身”,有兴趣的话可继续选学基础部分。
也许你关心需要多少时间学会,我给一个参考时间,请注意我是说的参考时间,入门一小时就够了,学习一个完整项目的话大概两个月吧,累计三个项目也就是六个月,可以达到中级水平吧。

一小时热身

安装的烦恼

本来rails的安装是很简单的,不过国内的网络环境让rails开发变得更困难了,目前似乎也没什么好的办法。
开始安装
假设ruby已经安装好了(推荐rvm安装管理ruby,不熟悉的话可以去ruby-china论坛的wiki找),基本的安装本来非常简单
bundle config 'mirror.https://rubygems.org' 'https://gems.ruby-china.com/' #配置源
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的设计原则

主要有两条:
不重复也就是简洁的意思吧,为不同的任务设计了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有很多优点,比如彩色,实用命令 ls String等。 可先单独用,熟悉后可加到rails中,需要在Gemfile中加pry, pry-rails两个gem。
####Chrome插件
####网络资源

初学的两大难点

我觉得路由和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写的,比较灵活,不过效果就一般。有一些流行的方案,目前还没用到。