《 网站 》原创设计与开发系列课程, 一条从零开始的清晰学习路线。 订阅即可学习全部课程

博客

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

Day 9:Ruby 集合与容器对象

数组(array),散列(hash)。array 里的项目有顺序,你可以用索引号得到对应的项目。hash 里的项目是成对的,一对里有个 key 还有个对应的 value。得到项目的 value 可以使用项目的 key 。

任何的 Ruby 对象都可以作为 hash 的 key 或者 value ,不过注意 key 在 hash 里一定是唯一的。hash 在其它的语言上也叫 dictionaries 或者 associative arrays  。

array 与 hash 很像。在某种意义上 array 就是 hash,只不过它的 key 是连续的整数。hash 有某种意义上也是 array,只不过索引可以是任何东西。

做个实验:

array = ["ruby", "diamond", "emerald"]
hash = { 0 => "ruby", 1 => "diamond", 2 => "emerald" }
puts array[0] # ruby
puts hash[0] # ruby

再做个实验:

Day 8:Ruby 字符串,符号,数字,日期

2016年9月11日 下午6:46 **

字符串

String 与 Symbol 这两个类提供了表示文字与处理文字的功能。这两个类之间很不同。

字符串表示

一个字符串一般用一组引号包装:

"这就是一个字符串"

单引号也行:

'我也是个字符串'

使用字符插值的时候得用双引号:

puts "二加二等于 #{2 + 2}"
puts '二加二等于 #{2 + 2}'

输出的内容是:

二加二等于 4
二加二等于 #{2 + 2}

单引与双引在 escape 时的区别:



微信好友

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



微信公众号

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



240746680

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

统计

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

社会化网络

关于

微信订阅号

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