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的设计原则
主要有两条:
- 不重复原则 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
常用开发工具
基本工具
- 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写的,比较灵活,不过效果就一般。有一些流行的方案,目前还没用到。