搭建环境

一、安装Ruby

http://rubyinstaller.rubyforge.org/上下载最新的Ruby one-click Installer for windows。

所有选项都选择。一顿经典的next之后,我们就安装了Ruby。

二、使用Rubygems安装Rails

因为刚才经典的next,我们已经成功的安装了Rubygems,利用它可以安装Rails。

gem包含很多子命令和相应的选项,感兴趣的可以在dos窗口下输入gem -h来查看帮助。

好了,让我们用一条语句来安装Rails。

首先确保你的计算机连接到了internet。

在dos窗口下输入:gem install rails --remote

等待吧。。。

有yes or no的地方按“y”

三、数据库的选择

要说Rails对数据库的连接,用mysql吧,这可是官方推荐的。至于mysql安装与配置,再次不赘诉了。

现在,我们已经搭建了开发Rails应用的环境,马上就要开始Rails应用的编写了。呵呵

Ruby简介

Ruby 是由日本人松本行弘发明的一种面向对象的脚本语言。虽然很多语言都宣称自己是面向对象的,但是每种语言的解释都不一样,大多是以它们自己特有的方式来解释什么是面向对象,而实际情况中,这些面向对象语言又都采用了很多非面向对象的做法。以 Java 为例:如果你想对一个数字取绝对值,你会怎么做呢? java 的做法是

int c = Math.abs(-166);

也就是将一个数值传递给 Math 类的一个静态函数 abs 处理。为什么这么做?因为在 java 中, 数值是基本类型不是类。

而在 Ruby 中,任何事物都是类, 也就是说,数字 –166 就是对象,取绝对值这样的操作应该属于数字本身,所以”Ruby 方式”的做法就是:

c = -166.abs

这种做法是不是更直观一点。

接着我们来介绍一下 ruby 语言的一些简单特点。

如何定义函数

def hello(name)

result = "hello, " + name

return result

end

这就是一个最简单的函数定义。Ruby 以 def 开始一个函数定义,后跟着 函数名, 然后是 参数,但是参数不必非要放在括号中, 你可以这样定义 def hello name ,之所以要用括号是为了更清晰。在 ruby 中你可以用多种方式来完成同一件事情,这也是 ruby 的设计思想。

Hello 函数很简单, 将参数和 “hello, “字符串组合在一起,赋值给临时变量 result ,然后再返回 result。 你会注意到 result 变量并没有申明,因为在 ruby 中无需申明,变量在赋值中自动使用。 另外 ruby 中不需要使用 ; 来结束每个语言,只要保持每条语句在单独一行就可以。 Ruby 也不包含 {} 来定义块结构, if , when 函数都以一个 end 关键字来结束。缩进不是语法(python 程序员要失望了)。第一次使用ruby 我也有点不习惯,因为我认为python 语言的缩进语法可以使得阅读程序代码更容易一些。但是学习了一段时间后,我发现缩进语法并不是那么重要,Ruby 本身带来的帮助远比这个更重要。而且代码的易读性也不是由缩进来改善的.此外上面的代码还可以更简化。

def hello (name)

" hello, #{name}"

end

在 ruby 中,函数的最后一条语句如果是表达式,那么它就作为返回值。在上面的代码中,用到了另外一个概念,就是表达式插入,字符串可以用单引号和双引号来括起来。但是两者还是有一点区别。区别在于处理时间上的不同。如果使用单引号,那么处理的时间很短。如果使用双引号,那么你可以插入变量,表达式,还有就是转意字符的替换,最常见的是 \n,\t 等。 以上面的代码为例 字符串中插入了变量 name ,字符串中插入变量以 # 开始,变量放在{}中。 但是特殊变量可以不用 {}. 那么什么是特殊变量呢。这个也是 ruby 特别的地方。在 Ruby 中,全局变量以 $开头,静态变量,也就是类变量以 @@ 开头,实例变量以 @ 开头。如果在字符串中引用 实例变量,你可以这么写。

def hello

" hello, #@name"

end

关于变量和基本结构我们就简单介绍这些,下面我们要介绍一个重要的Ruby 概念。就是 interator (迭代器)。 这个概念遍布在很多 ruby 代码中,也是最常见的 ruby way 。正是因为 interator ,在 ruby 程序中,你很少会看到循环的使用。 举个最简单的例子,如何打印从 1 到 6 的结果。

在 java 等语言中,我们的实现方法是:

for(int i = 1; i<6;i++) {

System.out.println(i);

}

而在 ruby 中,一切皆为对象,数字本身就是对象(我们在前面已经介绍过了),数字本身有它自己的迭代器 times 。那么让我们看看它的实现。

6.times {|i| p i }

是不是很简单。

迭代器的概念很有趣,它是如何在 ruby 中实现的呢。每个函数可以不光带有参数,还可以在参数后面带一个代码块。代码块在ruby 中是以 {} 和 do end 来包围起来的。通常如果是单行使用 {} ,如果是多行这使用do end 。这并非强制,只是习惯性用法。

代码块和参数并不相同,它和函数的执行可以说是并行的,确切的说是接替进行。如果在函数内部如何在运行过程中碰到了 yield ,它就会将函数执行过程交给函数附带的代码块来执行,代码快执行完了,执行流程转到函数内部继续运行。似乎很难理解,以下面这段代码来理解可以会容易一些。

def callBlock

yield

yield

end

callBlock { puts "In the block" }

输出:

In the block

In the block

CallBlock 函数中只有两个 yield 语句,它在执行过程中将执行权交给 函数附带的 block 运行,block 输出字符串 "In the block" ,这样最终结果就是输出两行 "In the block" 。 在函数内部使用 yield 还可以带任意多参数。比如

yield a, b, c

这三个参数对应代码块中的三个参数 {|x,y,z| p x y z }