初探Rails

上一篇 / 下一篇  2008-02-02 15:08:06 / 个人分类:Ruby

Rails是基于Ruby的框架,因此Rails也是可以跨平台的,关于Rails的安装,本blog里面已经有了阐述,这里就不多说,注意我们安装的时候使用到了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,还包括scrīpt,我们从上面的文件夹就可以看到,里面包含了服务器程序server.rb,启动服务器:

 

D:\blog>ruby scrīpt\server
=> Booting WEBrick...
=> Rails application started onhttp://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\scrīpt>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\scrīpt>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 scrīpt\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 scrīpt\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在开发上的效率,也要相信,未来世界里,开发效率将是一个比运行效率更重要的因素,我想这一切就像工业革命带来的东西一样,但我也希望,程序员不要向当时的工人一样,机器提高效率,工人失业(编程语言的升级,程序员越来越廉价),而后破坏机器。记住,我们永远不可能去阻止生产力的发展,也不要以为自己用锄头干得赢别人的机器(除非你在做劳斯来斯),只有提高自身的能力,才能迎合以后社会的需求,我们也就不会越来越廉价。


TAG: Ruby

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-10  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 22927
  • 日志数: 47
  • 建立时间: 2008-01-29
  • 更新时间: 2008-02-02

RSS订阅

Open Toolbar