🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

博客

Day 18:Rails 应用的测试

准备一个全新的 Rails 应用,今天我们了解一下 Rails 应用的测试。

创建测试

先为我们要创建的控制器创建一个测试,比如我要创建一个名字是 Pages 的控制器,对这个控制器的测试可以放在 test/controllers 目录的下面,创建一个测试文件,文件名里可以包含控制器的名字,再加上一个 test 后缀:

test/controllers/pages_controller_test.rb

在这个测试文件里,先 require 测试需要的一个助手,名字是 test_helper。每个测试都是一个类,让它继承 ActionDispatch::IntegrationTest。在这个测试文件里添加:

require 'test_helper'

class PagesControllerTest <  ActionDispatch::IntegrationTest
end

Day 17:两步创建一个简单的 Rails 应用

今天做点试验,先准备一个全新安装的 Rails 应用。

用户资源

生成一个 User 资源,给它添加一个 name  还有 email,存储用户的名字与电子邮件地址。

rails generate scaffold User name:string email:string

migrate 一下,会在数据库里创建 users 数据表,表里会有 name 与 email 字段。

rails db:migrate

现在你就可以在浏览器上管理用户了。
57c4574d-6bb9-42ef-92a5-0d5a1e12d3bd

Day 16:Rails Active Record Migration

宁皓网的付费会员可以查看课程:《Rails:数据库 Migration》http://ninghao.net/course/4133

创建 Migration

使用命令行:

rails generate migration 名字

简写:

rails g migration 名字

migration 的名字要描述清楚它的作用,使用驼峰式的名字,创建的 migration 会包含一个时间,它会作为数据库的版本,Rails 也会用这个时间来判断哪些是执行过的 migration 。执行的 migration 会记录在数据库里。

现在我要创建一个 migration,可以帮助我们在数据库里创建一个数据表:

rails generate migration CreateArticles

返回的东西像这样:

Day 15:Rails 基础

宁皓网的付费会员可以查看课程:《Ruby on Rails:起步》http://ninghao.net/course/4101

resource ,资源。一个资源就是一种相似对象的集合,比如文章,用户。你可以对资源执行创建,读取,更新,删除的动作,这些动作被称为 CRUD 操作。

一个博客,里面可能会有文章资源。创建一个文章资源,名字是 articles,先添加一个资源类型的路由。编辑 config/routes.rb,添加一行 resources :articles,像这样:

Rails.application.routes.draw do
  resources :articles
  # ...
end

执行:

rails routes

返回:

Day 14:“Hello” Ruby on Rails

学习与开发 Ruby on Rails 应用的过程是在本地电脑上完成的。也就是你需要在本地电脑上创建 Rails 项目,运行它,然后学习或去做真正的开发。两种方法,一是可以直接在本地电脑上安装 Rails 项目的所有工具,然后直接在本地电脑上运行 Rails 项目。另外, 我们可以使用 Docker 去 Compose 一个 Rails 项目。

在本地直接运行 Rails 项目

需求

我在 macOS 上测试了整个过程。你需要:

  1. 安装 Ruby
  2. 安装 Xcode

安装 rails

打开终端,用 Ruby 的 Gem 去安装 Rails:

gem install rails

这会安装最新的 rails。你也可以指定安装具体的 Rails 版本,像这样:

gem install rails -v 5.0.0.1

如果你遇到错误:

Day 13:Ruby 匿名函数

Ruby 里面主要的可调用的对象是 Proc 对象,Lambdas,方法对象。Proc 是独立的代码序列,你可以创建,存储,可以作为方法的参数,你愿意的话,也可以使用 call 方法执行它。Lambdas 跟 Proc 对象很像,Lambda 其实就是 Proc 对象,不过稍有不同。

Proc 对象

用 Proc.new 创建一个 Proc 实例:

pr = Proc.new { puts "inside a proc's block" }

上面的代码块就是 Proc 的主体,调用 Proc 的时候会执行代码块里的东西:

pr.call

结果是:

inside a proc's block

给 proc 方法一个代码块,它会给你返回一个 Proc 对象。

proc { puts "hi!" }

Procs 与 Blocks

不是所有的代码块都跟 Proc 一样。

[1,2,3].each {|x| puts x * 10 }

上面用了个代码块,但是并没有创建一个 proc。

一个方法可以捕获一个代码块:

Day 12:Ruby 文件 I/O 操作

Ruby 对待文件与 I/O 操作也是面向对象的。

Ruby 的 I/O 系统

IO 类处理所有的输入与输出流。

IO 类

IO 对象表示可读可写的到磁盘文件,键盘,屏幕或设备的连接。

程序启动以后会自动设置 STDERR,STDIN,STDOUT 这些常量。STD 表示 Standard,ERR 是 Error,IN 是 Input,OUT 是 Output。

标准的输入,输出,还有错误流都封装到了 IO 的实例里面。做个实验:

>> STDERR.class
=> IO
>> STDERR.puts("problem!")
problem!
=> nil
>> STDERR.write("problem!\n")
problem!
=> 9

STDERR 是一个 IO 对象。如果一个 IO 对象开放写入,你可以在它上面调用 puts,你想 puts 的东西会写入到 IO 对象的输出流里。IO 对象还有 print 与 write 方法。 write 到 IO 对象的东西不会自动添加换行符,返回的值是写入的字节数。

Day 11:Ruby 正则表达式

Ruby 正则表达式的字面构造器:

//

试一下:

>> //.class
=> Regexp

模式匹配有两个部分组成,一个正则表达式(regexp),还有一个字符串。正则表达式预测字符串,字符串要么满足预测,要么不满足。

看看是不是匹配可以使用 match 方法。做个实验:

>> puts "匹配!" if /abc/.match("the alphabet starts with abc.")
匹配!
=> nil
>> puts "匹配!" if "the alphabet starts with abc.".match(/abc/)
匹配!
=> nil

除了 match 方法,还有个模式匹配操作符 =~ ,把它放在字符串与正则表达式的中间用:

一个贴子的回复

掌握基础

我多想能跳过基础,跳过那些看起来没有什么意义的东西,我看不出它们跟我想要的产品之间有任何的关联。我不想浪费力气,我多想能直接去实现自己的想法,我失败了,我猜如果你像我一样,也可能会失败。不管你有多看不起 “基础” 这两个字,你也永远不能摆脱它,所有的一切都是从这里开始的。

挂档起步

比起开车起步,作为一名自由职业者,软件工程师,互联网企业的创业家的起步步骤要简单一些。HTML — CSS — JavaScript — PHP/Ruby/Python/Go/Swift。困难的工作已经被别人做了,我们只是去利用一下这些东西,又有何难。看这篇文字的人的智力一定比写这篇文字的那个人要高很多。要做的也只是学几个单词,理解几个概念,了解一些规则而已。

快速试验

有了一个想法,先别花一年或更长时间才能测试并得到反馈,最多也不能超过半年,要用最简单的产品快速的得到反馈的结果(从《精益创业》学来的)。Drupal,WordPress,在早期都能很好的帮助咱们,去实现一些比较简单的想法,更重要的是快速的试验想法是否可行。可能一两个月就可以让你的想法在线上测试了。

Day 10:Ruby 枚举

想要枚举的 Class 就得有一个 each 方法,它的工作就是 yield 项目给代码块,每次一个。

each 做的事在不同的类上可能不太一样,比如在数组上,each 会 yield 第一个项目,然后是第二个,第三个 ...  在 hash 里,yield 的是 key/value 作为两个元素的数组。在 file 处理上,每次会 yield 一行内容。range 迭代会先看一下有没有可能迭代,然后假装它是一个数组。在自己的类里定义了 each 方法,它的意思是你自己定义的,只要它 yield 点东西就行。

先写个类,理解一下 Enumerable 是怎么回事。Rainbow 彩虹,每次 yield 一种颜色:

class Rainbow
  include Enumerable

  def each
    yield 'red'
    yield 'orange'
    yield 'yellow'
    yield 'green'
    yield 'blue'
    yield 'indigo'
    yield 'violet'
  end
end
微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点