Rails是基于Ruby的框架,因此Rails也是可以跨平台的,这里就不多说,注意我们安装的时候使用到了gem这个命令,其实这个是一个著名的包管理工具,rubygems。在这里,我是用的是mysql数据库,来给大家做一个演示,本文大部分资料参考《ruby on rails实践》而写的。
rails简单,最简单的一个blog应用,只要1行代码,对了,只要1行代码,你就可以完成一个blog
1.建立我们的blog app
D:/>rails blog
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create components
create db
create doc
create lib
...
rails命令建立web app,格式:rails appname,它就会在当前目录下面身成一个文件夹保存此web app
2.rails不单是一个framework,还包括script,我们从上面的文件夹就可以看到,里面包含了服务器程序server.rb,启动服务器:
D:/blog>ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2006-07-10 21:45:38] INFO WEBrick 1.3.1
[2006-07-10 21:45:38] INFO ruby 1.8.4 (2005-12-24) [i386-mswin32]
[2006-07-10 21:45:38] INFO WEBrick::HTTPServer#start: pid=2556 port=3000
在浏览器中输入:http://127.0.0.1:3000 就可以访问默认页面:
这个web服务器叫做webrick,这是一个纯ruby写的服务器
注意,你可以试试这样启动服务器 D:/blog/script>ruby server,我可以明确的告诉你,这样是错误的,这是实践的经验,为什么,不要问我,我说过:这是经验告诉我的
3.程序员关心的是app目录
app目录包含了:controllers,helpers,models,views 4个文件夹,这是一个典型的MVC构架(model,view,controller),这里对MVC做一个简要的解释吧:
M:model,主要完成业务逻辑处理,Rails是一个使用ORM的框架
V:view,主要负责呈现任务,把数据表现出来
C:controller,作为Model层和View层的连接体
至于helpers目录,是不属于MVC构架的内容,本文也不想设计到它,我也不打算让大家了解太深,不然也不叫做:初探。只要“不知其然,知其所以然”就好了,以后的内容会详细的提到
何如填充这3个文件夹(controllers,models,views)
4.生成controller,就像我们需要身成web app目录一样,我们也需要生成,controllers,models,views
D:/blog/script>ruby generate controller MyTest
exists app/controllers/
exists app/helpers/
create app/views/my_test
exists test/functional/
create app/controllers/my_test_controller.rb
create test/functional/my_test_controller_test.rb
create app/helpers/my_test_helper.rb
注意,首先,controller实质上是一个类,所以,这里使用MyTest这样的名字,注意这里大小写将会造成巨大的差异,请不要以为你在使用DOS,你已经在使用ruby了
进入controllers目录,你会发现文件已经生成好了,叫my_test_controller.rb,打开:
class MyTestController < ApplicationController
end
的确是一个类,继承于ApplicationController。我们在打开controllers的时候,有没有发现application.rb这个文件?里面保存的就是ApplicationController类,所以大家不要看application.rb不顺眼,就删除了,现在是该做一些总结的时候了:
生成controller的方法是:ruby generate controller ClassName,这时会产生一个ClassNameController的类,保存在class_name_controller.rb目录里面,注意这里的命名规则,假如你读过本blog有关命名规则的总结,应该不会觉得疑惑:ruby里面使用大写首字母的方式给类命名,其他的命名使用下划线分离各个单词。还有要说明的是,generate是一个像server一样的ruby程序,后面加上了2个参数,就形成了上面的命令
5.url的映射
controller会映射成 url ,具体映射方式是:http://127.0.0.1:3000 + controller的文件名(不是类名)
上面的例子就是 http://127.0.0.1:3000/my_test/ 就访问到了这个controller
记得前面说过的MVC吗?C是什么?就是controller。什么用?连接M,V层。所以,对于所有的访问,必须先通过controller,就像要通过一个控制的开关一样,controller就是这个开关。记住controller可以于url映射,下面我们得到什么结果?打开http://127.0.0.1:3000/my_test/ 结果是:
什么都没有,的确,什么都没有,因为我们还没有开始利用这个controller,它并不知道,要做一些什么,通俗的说,就是要给这个controller加上方法,使它运行起来
6.为controller添加方法:让控制器控制我们的请求流向
我们输入:http://127.0.0.1:3000/my_test/ 其实就是在输入:http://127.0.0.1:3000/my_test/index 因为index是默认的,就像我们访问网站有一个默认主页一样。
定义index:
class MyTestController < ApplicationController
def index
render_text "Hello World" #这里没有定义index.rhtml,而用一个方法,在浏览器输出,这也是可以的
end
end
结果:
定义happy:
class MyTestController < ApplicationController
def index
render_text "Hello World"
end
def happy
render_text "I am very happy"
end
end
结果:
假如我已经做好了一个界面,如何转向?比如我做了一个happy.html放入view文件夹相应的目录,比如这里,我放入view下面的my_test目录,再修改controller的定义:
class MyTestController < ApplicationController
def index
render_text "Hello World"
end
def happy #写一个空定义就可以了
end
end
结果显示为:
现在说一说扩展名的问题:扩展名字随便你取,比如,我取名为.happy也就是我在view/my_test下面放入一个happy.happy的文件,结果为:
假如不取扩展名,就必须命名为 .rhtml 因为这个是默认的,即使用 http://127.0.0.1:3000/my_test/happy 在view/my_test 下就必须有一个 happy.rhtml 的文件
7.一切正式开始,建立数据库:
我们开始做blog了,先建立个数据库blog,再建立表words:
mysql> create table words(
-> id int not null auto_increment primary key,
-> name varchar(50),
-> word text,
-> date date);
Query OK, 0 rows affected (0.44 sec)
我们知道,数据库的表,一般都是用复数,这是习惯,请你也尊重这个习惯,相信“习惯带来力量”!
数据库好了,怎么连接数据库?做过web app的朋友,一定都知道,连接数据库是一种比较麻烦的事情,特别是领略java的复杂以后,对连接数据库一定感觉很不良好,下面看看rails怎么连接数据库:
我们要做的是配置,不是写代码,何如配置?打开config目录,下面有一个database.yml,这是ruby用于保存数据的方式,而java用xml,yml更加清晰可读:
development:
adapter: mysql
database: blog
username: root
password:
host: localhost
test:
adapter: mysql
database: blog_test
username: root
password:
host: localhost
production:
adapter: mysql
database: blog_production
username: root
password:
host: localhost
我们修改过的就是 database: blog 这一行,改成需要的名字就可以了
8.填充app目录
先生成controller:
D:/blog>ruby script/generate controller blog
exists app/controllers/
exists app/helpers/
create app/views/blog
exists test/functional/
create app/controllers/blog_controller.rb
create test/functional/blog_controller_test.rb
create app/helpers/blog_helper.rb
再生成model:
D:/blog>ruby script/generate model word
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/word.rb
create test/unit/word_test.rb
create test/fixtures/words.yml
exists db/migrate
create db/migrate/002_create_words.rb
修改一下blog_controller.rb,注意,这是我们blog这个任务写的第一行代码
class BlogController < ApplicationController
scaffold :word #使用scaffold方法
end
这里要注意:
1)scaffold方法后面加上的如果是model里面的类的名字,一定要注意大小写,如果是文件的名字就不要了
2)model名字必须是数据库的单数
这些都是符合ORM,一个表和一个类对应,我们要保证的就是model名和数据库名字统一,仅此而已
看结果,魔法出现了:
打开:http://127.0.0.1:3000/blog/new 显示:
我先添加一条信息
再打开:
(下面是各个页面的连续截图)
浏览内容:
查看详细信息:
编辑信息:
是不是通过一行代码实现了功能,虽然说样子是不好看,不过一切都可以修饰,直接在view里面假如我们要的界面,再通过很少的改动,使用<%%>这样的脚本元素,可以实现动态的显示。
这里我们一行就搞定,rails本身设计是优秀的,比如model和表名的对应,通过以后的学习我们会了解更多,毕竟这只是一片简单的介绍,不想设计到太多复杂的内容,所以,就此为止吧,相信rails在开发上的效率,也要相信,未来世界里,开发效率将是一个比运行效率更重要的因素,我想这一切就像工业革命带来的东西一样,但我也希望,程序员不要向当时的工人一样,机器提高效率,工人失业(编程语言的升级,程序员越来越廉价),而后破坏机器。记住,我们永远不可能去阻止生产力的发展,也不要以为自己用锄头干得赢别人的机器(除非你在做劳斯来斯),只有提高自身的能力,才能迎合以后社会的需求,我们也就不会越来越廉价。