zoukankan      html  css  js  c++  java
  • 初探Rails

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

  • 相关阅读:
    spring-cloud-gateway动态路由
    spring-cloud-gateway静态路由
    activiti6官方示例笔记
    spring-cloud-gateway过滤器实践
    spring-cloud-gateway简介
    设计模式--策略模式
    学习ConcurrentHashMap1.7分段锁原理
    SpringBoot Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    MYSQL触发器的使用
    储存过程 (创建,调用,查询,删除)
  • 原文地址:https://www.cnblogs.com/chinatefl/p/565122.html
Copyright © 2011-2022 走看看