为了账号安全,请及时绑定邮箱和手机立即绑定

Web开发的王者: Rails 教程. 1. 入门 (思维原创)

阅读本文收获
  1. 发现了一个好框架
  2. 15分钟入门 Rails.
什么是Rails? 我干嘛学它?
  1. 在国外, Rails程序员的平均工资最高. 在国内, 2,3年的Rails程序员工资也轻松高过其他程序员.
  2. Ruby on Rails程序员特别好找工作. 如果说现在移动端(ios, android) 一个职位有5个人应聘的话, 那么 Ruby职位就是 10个空缺才有1个候选人.
  3. Rails 是 Web开发的框架之王. 完虐其他框架.
  4. 性能不差. 用于优酷无线后端(7亿用户)
  5. 传统语言(特别是需要编译的语言) java/oc/php 让人郁闷, Ruby让人快乐.

最初, Rails的流行是源于 一段视频, 15分钟搭建一个Blog. 各种基本功能都有.

我的个人经历

05年毕业后, 到09年,做了3年半的java. 我一直是身边人做java最快, 做的又最好的人. 不过, 给自己最大的感受是:

做java 非常痛苦. 一点儿很小的功能, 就需要我花上好多时间去做. 做了2,3年之后,感觉自己本应该什么都懂了, 实际上一到自己单干项目时, 特别无力. 只会做些后端. 连CSS都不会. 为什么? 因为每天要加班. 从早上干到晚上, java 代码写的多, 但是解决的问题太少.

后来, 身边的java大神( 当时的javaeye( 现在的iteye) 上的朋友 ) , 一个一个的都转到了 ruby. 当时的大神才是大神, 都是跟 James Gosling 合影的那种. 所以我就随着他们一起转到了Ruby上.

最大的感受就是: 自己的时间多了.

以前某个功能, 需要我干一天, 现在只需要2小时.
一个功能, 用Java做, 先写5个Class, 然后 strategy, bridge 各种设计模式都用上. 代码轻松几百行. 现在用Ruby做, 几行代码搞定.

所以, 做了Ruby之后, 最大的好处是 时间充足了. 于是, 我就有时间学习各种其他知识: javascript, css, web自动化工具, H5, 移动端等等.

所以, 我来带领大家对Rails有个了解~ 希望入行的同学, 欢迎随时与我联系~ 好多公司跟我要Ruby的人呢~

架构小知识: MVC

MVC 几乎是最经典的架构. 10个框架,9个MVC /MMVC ...
简单的说:

  1. Model: 操作数据库
  2. View: 在浏览器端显示的视图
  3. Controller: 把request分发给action 处理. (一个controller包含多个action.)
安装Rails

(命令都以在Linux端为例. 在这里可以看到我的教程: 图文并茂版: 如何配置win7 + ubuntu 环境)

  1. 安装了ruby ( Ruby的语法, 见之前的文章:
    Ruby Lesson 1: 初识
    Ruby Lesson 2: 基础知识
    Ruby Lesson 3: 进阶
    )

  2. 安装 bundler 这个 gem:

    
    $ gem install bundler
  3. 安装Rails. (这里以 4.1.6 版本为例子)

    
    $ gem install rails -v 4.1.6

    安装时会出现一系列的命令, 只要最后你输入:


$ rails -v

看到显示版本号,就说明安装好了.


$ rails -v
Rails 4.1.6
创建一个Rails项目.

使用命令: $ rails new <项目名>, 例如:


$ cd /workspace
$ rails new library

就创建了一个项目,名为: library. (图书馆)

可以看到,生成了一堆文件:
图片描述
图片描述

然后它会自动执行 ‘bundle install’命令.

Rails使用bundler来管理各种依赖

跟java的jar 一样. ruby中也有很多第三方包, 我们管它叫 gem (小宝石)

每个Rails项目,都要依赖很多gems. 一个一个的管理会特别麻烦.

在java中,使用 maven, ivy来管理.那么在Rails中,就使用 bundler来管理.

bundler通过一个文件和一个命令来管理.

  1. 文件: Gemfile. 定义了所有的gem版本.
  2. 命令: $ bundle install , 会自动安装所有的 gems.
使用Gemfile安装各种依赖包.

编辑你的Gemfile(根目录下) 文件, 让它的内容看起来如下:


# 为了让安装gem速度更快,使用了淘宝的镜像.
source 'https://ruby.taobao.org/'   
gem 'rails', '4.1.6'  
gem 'sqlite3'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'therubyracer',  platforms: :ruby
gem 'jquery-rails'
gem 'turbolinks'

上面就是一个非常完备的Gemfile了.

安装各种依赖, gems.

先安装好 sqlite3的依赖:


$ sudo apt-get install libsqlite3-dev  

然后通过 命令: $ bundle install 即可.

图片描述

运行Rails.

使用命令:


$ bundle exec rails server

bundle exec: 是rails命令的前缀. 它会告诉rails, 以后用到的gem, 都是Gemfile中规定的版本.

下图就是启动后的命令.
图片描述

访问项目首页

打开浏览器, 访问 localhost:3000 ,能看到首页.(对于好奇宝宝来说,这个页面是存在于gem 文件中的.在刚才生成的library目录下找不到它)

图片描述

开始动手第一步:

现在项目没有任何内容. 只是有了一个骨架.
所以我们需要给他增加内容,丰满它.
例如: 输入一个网址, 显示一个页面.

假设,用户需要访问的URL: http://localhost:3000/books/list
那么, 我们只需要:

  1. 修改路由(router)
  2. 创建对应的controller, action
  3. 创建对应的页面(erb)
1. 修改路由 config/routes.rb

向该文件中,增加:
下面的代码:


Rails.application.routes.draw do
  # 加上下面的代码.
  resources :books do
    collection do
      get :list
    end 
  end 
end

它会生成一段”路由”, 也就是说,会识别 /books/list 这个URL,并且把它交给 books controller 的 list action 来处理.

2. 创建 controller/action

新建一个文件: app/controllers/books_controller.rb ,(见下面截图)
一个controller 是由多个action(也就是普通方法组成的)

不用的action, 处理不同的 url .

这个list action 里没有任何代码. 它会直接跳转到对应的erb页面( app/views/books/list.html.erb)


class BooksController < ApplicationController
  def list
  end
end 
3. 创建对应的视图文件

新建 "app/views/books/list.html.erb "

(所有books controller中的视图,都要放到 "app/views/books" 目录下)
(action 叫什么名字,视图就叫什么名字. "list" action对应的视图,就是: list.html.erb)

为了简单起见,它只显示HTML代码.


<p>三体1 - 地球往事</p>
<p>三体2 - 黑暗森林</p>
<p>三体3 - 死神永生</p>
看到结果

访问浏览器: http://localhost:3000/books/list
可以看到结果:
图片描述

这是我们看到的最简单的结果页面.

在视图(erb) 中,使用ruby 代码.

erb的完整拼写是: embedded ruby, 跟JSP, PHP一样,可以在HTML的间隙插入Ruby 代码.

修改 app/views/books/list.html.erb

可以看到,语法与PHP, JSP 一样.
<% %> 来执行ruby 代码.
<%= %> 来显示返回值.


<h3> 下面的代码,都是由 RUBY代码生成的</h3>
<% books = ['三体1 - 地球往事', '三体2 - 黑暗森林', '三体3 - 死神永生'] %>
<% books.each do book %>
  <p> <%= book %> </p>
<% end %>
再次看到结果

访问浏览器: http://localhost:3000/books/list
可以看到结果:

图片描述

总结
1. URL被路由识别.

http://host/books/list

上面的url, 如果是按照rails的约定惯例来看的话,就是: 显示books的list页面.

所以,rails 会把这个请求,根据 路由(router),发送给 对应的方法(也就是 controller中的 action)。

2. 配置路由(router) 的具体方法:

修改路由文件: config/routes.rb:


Rails.application.routes.draw do
    resources :books do
        collection do
          # 下面这个路由, 让rails 可以处理URL:  /books/list  
          get :list
        end
    end
end
3. Controller 与 Action 的写法.

list action 做一些 处理, 显示对应的 erb (JSP, PHP也是一样的)


class BooksController < ApplicationController
  def list
    #  啥也不写,就渲染对应的
    #  app/views/books/list.html.erb
  end
end
4. 渲染erb页面

如果要渲染的是一个  erb 页面, 我们可以在erb中直接写ruby代码.  
<% %>:  仅执行
<%= %>: 执行并显示结果到页面中.
例如:

<h3>注意: 使用了ruby的代码来显示HTML</h3>
<%  books = ['三体1 - 地球往事', '三体2 - 黑暗森林', '三体3 - 死神永生'] %>
<% books.each do book %>
  <p><%= book %></p>
<% end %>
源代码

本节源代码可以在下列地址下载:
https://github.com/sg552/rails_lesson_1_setup_and_run

PPT可以来这里下载:
http://siwei.me/about-me/speaks

点击查看更多内容
52人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
421
获赞与收藏
3786

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消