fuliangliang的Blog

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。

用户操作
[即时聊天] [发私信] [加为好友]
fuliangID:fuliangliang
65446次访问,排名1598好友1人,关注者3
fuliangliang的文章
原创 100 篇
翻译 0 篇
转载 25 篇
评论 29 篇
fuliang的公告

我的联系方式:20542606

Email:fuliangliang@gmail.com


最近评论
topgunqq:条理清楚,简单易学.比网上其他例子要好一些.至少按照楼主写的过程,我这个初学者实验成功了!
marshluca:恭喜~~
请问有没rails 做的项目,比方blog?
marshluca@gmail.com
marshluca:恭喜~~
请问有没rails 做的项目,比方blog?
marshluca@gmail.com
chucai:写的非常的好,仔细的拜读了。思路很清晰。考虑的问题也比较全面。
tbsc3:我也遇到了这个问题,如果配1 M就有用,大于2M就还是默认的 不知道你有没有解决呀,教教我
文章分类
收藏
    相册
    净月潭一日游
    页面图片
    日历
    文章收藏
    我的JavaEye博客
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 初探Ruby on rails收藏

    新一篇: 应用Hibernate3的DetachedCriteria实现分页查询  | 旧一篇: Spring学习小结

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

     

    发表于 @ 2006年12月23日 17:13:00|评论(loading...)|编辑

    新一篇: 应用Hibernate3的DetachedCriteria实现分页查询  | 旧一篇: Spring学习小结

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © fuliang