[rails] 我的订餐系统 -- 小试ruby on rails

转载 2007年09月24日 09:52:00
近期在java社区中一种新的脚本语言ruby,及用ruby开发的一个wab框架 rails也热闹了起来.引起了不少的java开发人员的关注.
  本人平时还是很少接触脚本语言方面东东,看到相关的评论
例如:  "习惯约定优于配置" -- 那样就用象java那样麻烦且繁杂地配置N多XML
           "'一站式'面向用户的简单易用的框架"    
           "Ruby 语言- 真正的面向对象脚本语言"
           "Ruby 语法更简单,灵活" 
   "声称:Rails 的开发效率是 java 开发的 10 倍"
等等,再得到老大的强烈推荐,不禁也开始接触了一下.
      
声明:本人接触三天,看过一些简单的介绍以及一些文档,实操过一个小项目,并未深入了解,这一文章并非语言及框架使用教程,只是一个感性认识,其中代码或许并非最简洁,如要更深入学习ruby,rails,请参考相关的官方站点以及其语法参数书.
Ruby 与 Rails
[什么是RUBY ?] 
        Ruby 是由日本人松本行弘发明的一种面向对象的脚本语言.
声称,更快,更通俗易懂的面向对象的语言,本人接触这段时间,感觉到关于面向对象的确做得不错.
一些特点:
1、一切都是对象,例如:
        数据类型转换提供如 to_ary,to_i,to_s 等方法,
        
@i = "2".to_i    //字符串转数值类型
puts @i
+1

        不再象java中的诸如:
         Integer.parseInt()
        String.valueOf()
        那样难看与及难以理解
        Time.now.strftime(fmt) Time.now对象通过strftime格式化日期类型
  再如koalant在它那本ruby on rails实践中说到   -166.abs 可以直接取其-166绝对值
         ………………
2、代码块非强制用{} ,无需 ;  作分行标识;
3、语法灵活,一种可以功能可多种实现,随个人爱好;
4、语法简洁等,做一个应用只要用到几行代码,这也是脚本语言的优势所在
        
        更详细可参考 http://www.ruby-lang.org/ 以及下面提供的些文档资料.
       
[什么是Rails ?]
        RAILS是用RUBY开发的一个web框架.
        实现一站式开发.        http://www.rubyonrails.org/ 有比较详细的介绍.
Rails is a full-stack, open-source web framework in Ruby for writing real-world applications with joy and less code than most frameworks spend doing XML sit-ups
        声称用更少的代码实现web applications。
        此框架主要包括三部分
        Active Record  一个ORM实现
        Action Pack      View 以及controller
        Action Mailer    应该是关于mail方面的东西


[一些资料]
[1] koalant写的Ruby on Rails实践  ,通俗易懂,介绍了ruby on onrails中的一些基础的东东
[2] IBM中文文章: Ruby on Rails 和 J2EE:两者能否共存?
[3] Agile Web Development with Rails(以一个案例详细介绍了ruby on rails)
 下载请见:
http://www.itpub.net/398528.html
[4] Ajax on Rails http://www.onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html 
[5] Programming Ruby http://www.rubycentral.com/book/index.html
快速安装
1、下载
       到目前为止最新版本是Ruby 1.8.2,可以到http://rubyforge.org/frs/?group_id=167&release_id=2049
        下载 One-Click Installer - for Windows
2、点击下载exe文件一直NEXT 安装就OK [ 说明:本人安装在C:/ruby/目录]
3、使用 rubygems 来安装 rails
      CMD进行命令行窗口,通过网络进行远程安装 rails
C:/> gem install rails --include-dependencies
//
 Attempting local installation of 'rails'
Local gem file not found: rails*.gem
Attempting remote installation of 'rails'
Updating Gem source index for: http://gems.rubyforge.org
………………
………………//一连串安装信息

C:/> rails C:
/myrails         //建立web app 目录
      create
      create  app/apis
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  components
      create  db
      create  doc
      create  lib
      create  log

      说明如果发现gem,rails命令等用不了,可能是环境变量未设置好,
      可自行设置指向你的 安装目录/bin
      
  4、运行服务器
        
C:/> ruby c:/myrails/script/server
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2005-08-11 20:29:56] INFO  WEBrick 1.3.1
[2005-08-11 20:29:56] INFO  ruby 1.8.2 (2004-12-25) [i386-mswin32]
[2005-08-11 20:29:56] INFO  WEBrick::HTTPServer#start: pid=4072 port=3000
127.0.0.1 - - [11/Aug/2005:20:30:08 China Standard Time] "GET / HTTP/1.1" 200 32
34
- -> /
127.0.0.1 - - [11/Aug/2005:20:30:09 China Standard Time] "GET / HTTP/1.1" 304 0
- -> /
127.0.0.1 - - [11/Aug/2005:20:30:24 China Standard Time] "GET / HTTP/1.1" 304 0
- -> /

http://127.0.0.1:3000 
恭喜你,如果看到
Congratulations, you've put Ruby on Rails!页面
则表示安装成功!!!!

5、 学习一个Ruby的语法
     ruby  以rb为后缀的文件. 
hello.rb
@a = "hello world!"
puts @a

C:/ruby/bin>ruby hello.rb
hello world!
其它可参考语言书学习.
我的订餐系统

1、功能,包括四类基本管理,主要是新增,修改,查看,删除(CURD) 四种操作
      餐厅管理(shop)
      菜式管理(good)
  人员管理(human)
      订单管理(order)
  
2、首页效果截图

                由于本人偷懒,样式借用了jsp wiki的,在此声明一下: )
[主界面,使用frame,左边为主要功能菜单,右边为进行CURD操作提供界面操作]

orderList[1].gif

[页面结构如下所示]
orderList[2].gif

  • 员工管理
    1、快速开发,自动生成基本文件结构目录及文件
          执行命令,自动生成项目所需要的文件及其文件结构,几秒种架设好订餐系统框架!!!
          
    C:/myrails>rails c:/myMealOrder

         说明:rails 一直贯穿的思想说是"习惯约定优于配置",所以,文件结构都是它定义的,我们只要将相应
                 文件放到其定义好的目录下就行了。
                  例如:controller 应该放到其 webapp/app/controllers 下,本文目录为[C:/myMealOrder/app/controllers]
                              model 应该放到其      webapp/app/model下,本文目录为[C:/myMealOrder/app/model]
                              views 应该放到其      webapp/app/view下,本文目录为[C:/myMealOrder/app/views]
            另外,根本目录为webapp/public/ 你可以通过修改index.html来定义你自己的index页面
    
          2、启动webrick 服务器测试
                rails默认使用webrick服务器,官方网站了解其更多www.webrick.org
               执行命令
               

C:/>ruby c:/myMealOrder/script/server 


              打开IE 浏览 :http://127.0.0.1:3000
             看到Congratulations, you've put Ruby on Rails!表示配置成功
  
3、建立数据库以及进行配置
    CREATE TABLE humen (
    id int(11) NOT NULL auto_increment,
    code varchar(100) NOT NULL default '',
    mame varchar(100) NOT NULL default '',
    PRIMARY KEY  (`id`)
  )      
    说明,习惯约定,默认情况下主键名为id,表名为复数形式,具体操作我也有点糊涂,
    例如本例子中的human model对应其数据表名为humen。这里我就略过了。具体资料可参考更详细的资料。
    配置,打开 C:/myMealOrder/config/database.yml
    将其中参数设置正常就行了。
    例如将 database: rails_development 设成你的数据名等

  4、生成human 的 model,controller文件
  

 ruby c:/myMealOrder/script/generate controller human
      exists  app
/controllers/
      exists  app
/helpers/
      create  app
/views/human
      exists  test
/functional/
      create  app
/controllers/human_controller.rb
      create  test
/functional/human_controller_test.rb
      create  app
/helpers/human_helper.rb

 ruby c:/myMealOrder/script/generate model human
      exists  app
/models/
      exists  test
/unit/
      exists  test
/fixtures/
      create  app
/models/human.rb
      create  test
/unit/human_test.rb
      create  test
/fixtures/humen.yml


     
     4、快速实现CURD
    打开app/controllers/human_controller.rb文件,修改为

   class HumanController < ApplicationController
          scaffold :human
  end


  说明: 简单的一句 "scaffold :human" 就能对应生成human 的CURD操作及其页面。
  重启服务,再次浏览   http://127.0.0.1:3000/human
   action包括:
   list(列表,列出所有human),new(新建human),show(显示human),update(更新human),Destroy(物理删除human),界面如下图
list.gifnew.gifedithuman.gif
   我们可以注意其URL
   http://127.0.0.1:3000/human/new
   http://127.0.0.1:3000/human/show/1
   http://127.0.0.1:3000/human/edit/1
   http://127.0.0.1:3000/human/destroy/2
   rails也是MVC的模式,
   1、浏览器发出请求;
   2、后台寻找(new/show/edit/destroy/etc) controller,调用相对应的方法,及view模板;
   3、将结果返回给浏览者
   或许你会认为,这一默认的view大多数情况下并不适合,或许需要自己设计view模板,也行,rails提供快捷的方法
   方便用户自己设计view模板,只要定义action并将同名view文件(rhtml后缀的文件)放到其webapp/app/views/目录即可,
   下面将会介绍到相关的操作。
   

  • 餐厅及其菜式管理
    餐厅(shop),菜色(good)按员工管理操作方法进行新建,在这里就略过了!!
    http://127.0.0.1:3000/shop
    http://127.0.0.1:3000/good

    1、自己设计view 模板
          例如在餐厅列表中我要实现自己的样式,如下图:
    shoplist.gif
         具体操作, 新增加 myMealOrder/app/views/shop/list.rhtml (rails中以.rhtml为view模板文件)
      
    <table border="1" width="500px">
    <tr>
    <td width="20%"><p align="center"><i><b>code</b></i></td>
    <td width="20%"><p align="center"><i><b>餐厅名</b></i></td>
    <td width="20%"><p align="center"><i><b>电话</b></i></td>
    <td width="20%"><p align="center"><i><b>备注</b></i></td>
    <td width="10%"><p align="center"><i><b>编辑</b></i></td>
    <td width="10%"><p align="center"><i><b>删除</b></i></td>
    </tr>
    <% @shops.each do |shop| %>                  //ruby 语法,循环所有shop
    <tr>
    <td><%= shop.code %></td>
    <td><%= link_to shop.name, :action => "show", :id => shop.id %></td>
    <td><%= shop.phone %></td>
    <td><%= shop.remark %></td>
    <td><%= link_to "编辑", :action => "edit", :id => shop.id %></td>
    <td><%= link_to "删除", :action => "destroy", :id => shop.id ,:confirm => "Are you sure?" %></td>
    </tr>
    <% end %>
    </table>

    [1]
    <%
     @shops.each do |shop| %>                 
           //ruby 语法,循环所有shop
    <% end %>

    [2] <%= link_to shop.name, :action => "show", :id => shop.id %>
    生成<a>标签

    修改shop_controller.rb
        def list
            @shops 
    = Shop.find_all
        end

    http://127.0.0.1/shop/list 即可发现我们定义的view生效了 :)
    2、进行两表关联
          good 与 shop 关系为多对一的关联
          [1] 要实现在编辑good时可设置其所性shop,先为good表shop_id字段,关联shop表

          [2] 修改model文件,具体语法可参见相关的参考书本.这里就略过了
    class Good < ActiveRecord::Base
      belongs_to :shop
    end

    class Shop < ActiveRecord::Base
        has_many :goods
    end
    [3] 编辑controller 
      def edit
            @good 
    = Good.find(@params["id"])
            @shops 
    = Shop.find_all
        end
    [4] 为good 增加view.rhtml

    <select name="good[shop_id]">
    <% @shops.each do |shop| %>
    <option value="<%= shop.id %>"
    <%= ' selected' if shop.id == @good.shop.id %>>
    <%= shop.name %>
    </option>
    <% end %>
    </select>

    3、正确命名,自动绑定到objcet中
    在java 我们要实现form中的控件提交后自动绑定到object要借用到beanUtil并自己作N多扩展.
    rails中提供了快捷的方法,自要你按要求定义好控件名就能帮自己绑定.
    例如上面的 good[shop_id] 或  good[id] ,good[name] 等等
  • 订单管理
    1、order及item关联操作
                    @orderItem = OrderItem.new()
                    @human 
    = Human.find(@value)
                    @good_no_param 
    = "good_" + @value
                    @good 
    = Good.find(params[@good_no_param])
                    @orderItem.human 
    = @human
                       //为item绑定正确的员工及其订的盒饭
                    @orderItem.good 
    = @good
                    @orderItem.order 
    = @order
                    @orderItems 
    << @orderItem
                       //为order绑定新的item
                       @order.orderItems = @orderItems
                       @order.save  //保存

    说明一下,这样操作,修改order 时原item值并没删除或正确的修改,只是将item 的order_id设为0
    另外再增加相应的item.关于这方面的正确用法还有待研究:)
  • 其它代码简单介绍
     1、日期操作

            @date = @params["date"]
            fmt 
    = "%Y-%m-%d"
            
    if @date
            
    else
                @date 
    = Time.now.strftime(fmt)
            end

     2、 find一个对象
        
    Order.find(params[:id])

     3、条件查询
        @shopId = @params["shopId"]
            @goods 
    = Good.find(:all,
                                                 :conditions 
    => "shop_id = "+@shopId,
                                                 :order 
    => "code desc")

        
     3、 跳转页面
        
    redirect_to(:action => 'edit')


     4、session应用
       
    session[:good] ||= Good.find(params[:id]) 
  • 问题
    记录下在开发过程中遇到的问题
    1、没相应的工具支持,操作起来还是比较麻烦的,虽然代码量很少
    2、并不是很健壮,发现挺容易出错,而且出错信息也不全
    3、性能还有待增强,(笔者一边听歌一边开发,发现在运行程序时,不时会影响我的wmplayer播放)
  • 思考与总结
    本文并非建议大家使用ruby on rails,因为在应用过程中毕竟发现不少的问题.
    然而我们能学习些什么呢??
    [1] 工具支持 
    [2] 习惯优于配置
    [3] 一站式的开发
    [4] 更少的代码
    我想在那么大的java 开源社区中实现一站式的开发还是不现实的.
    笔者在想是否能有一个开源项目或者是落实到一个公司的技术框架中能实现到这几点,那样就可以从繁杂的配置以及少了为找N多个开源包或版本的问题而烦恼,而能专心于需求的确认及相关的业务逻辑的改进等等  : )   (完)

posted on 2005-08-14 14:54 一凡@ITO 阅读(8083) 评论(22)  编辑  收藏

评论

 

莫非是PDC (GLTc)成员?       

 re: 我的订餐系统 -- 小试ruby on rails 2005-08-15 19:54

what is "PDC (GLTc)"???       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2005-08-25 13:08

又多一个ror 扇子阿,非常详细,赞。       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2005-08-30 12:19

Ror 出1.0的时候可能会好点。
0.13号称是1.0 Milestone版本前的最后一个版本了       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2005-08-30 12:19

作者的文章好详细,推介。       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2005-09-01 12:46

没有ide支持的语言, 生产力不够, 但ruby on rails的思想不错       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2005-09-26 10:58

您好,小弟刚刚接触ruby,对网页设计还一窍不通,能否提供这个订餐系统的源码,不胜感激.可以发到我的邮箱,luyang@kongzhong.com.谢谢啦       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2005-09-26 12:43

对网页设计还一窍不通,怎么那么快学习ruby了?
建议先学习一下基础 ^-^,慢慢来       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2005-10-22 11:23

session[:good] ||= Good.find(params[:id])

:代表什么?

不加“:”不行吗?       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2005-12-06 23:08

性能还不错啦,就是启动的时候要慢一些。       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2005-12-09 21:26

请问作者怎样能显示出中文字出来       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2006-02-14 22:58

嘿嘿,兄台把源码交出来吧       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2006-02-16 12:45

to cjl123
显示中文字没什么特别的设置
to Anubis
源码不值下载,想学习还请这位朋友看看书,实践一下落不明 :)       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2006-04-20 23:45

挺好的
现在已经到1.1.2了吧
对于IDE,最近试过Komodo
还算不错       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2006-07-02 01:15

不错!up       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2006-07-10 09:21

再简单也只是一个脚本语言,一个玩具而已。

各位有用ruby开发项目的吗?       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2006-07-24 18:46

上面的兄台真是挺幼稚的。       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2006-09-04 10:13

<td><%= link_to shop.name, :action => "show", :id => shop.id %></td>

晕死了,上面这句话始终没有作用,传不了参数!!!       

 晴软网上订餐系统V2.0 2006-09-28 09:01

晴软在线订餐系统 V2.0
演示:">
除了少部分沿用了V1.2的功能外,大量的扩充了新的功能。
主要新加入的功能有:自动更新订单列表、订单打印、多分店多城市地区管理、餐币消费折扣、充值卡、消费积分及积分排行、多层次管理员、购物篮结合订餐者实现团体订餐、多状态订单、各分店独立管理、配送员与订单结合、图形统计与财务结算、以及人性化的后台操作界面。
欢迎朋友们加入网上订餐行列!
详细说明
演示:">
程序下载地址一:
程序下载地址二:">/qruan.rar
相关文章:       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2006-10-15 20:31

就是啊,不了解就不要乱说,最讨厌这种人了@kc
       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2007-03-28 16:11

谢谢了,收获很多 :)       

 re: [rails] 我的订餐系统 -- 小试ruby on rails 2007-04-04 15:10

不错       

 # re: 我的订餐系统 -- 小试ruby on rails 2005-08-15 14:59

基于ruby on rails的企业汇报系统

企业汇报系统基础功能实现: 1.添加单个企业展示 2.在企业下可以添加 层级,可以无限叠加 3.每个层级下可以展示汇报文档点击单个文档标题 可以查看文档内容 1/确定数据库表,即单个企业的...

rbenv配置ruby on rails 编程环境(Linux系统)

rbenv配置ruby on rails环境

使用Ruby On Rails15分钟打造一个博客系统

"15分钟做一个博客系统",是Ruby On Rails非常经典Demo练习。我也参考着视频,试着做了一遍,这里大概记录下过程。视频地址:http://v.youku.com/v_show/id_XN...
  • pan_tian
  • pan_tian
  • 2013年04月06日 15:38
  • 12636

Ubuntu 14.04 LTS 系统中使用rbenv配置Ruby on Rails环境

使用rbenv配置Ruby on Rails环境

Ruby on Rails 学习(三)——15分钟搭建一个博客系统

“15分钟搭建一个博客系统”,是Ruby On Rails非常经典Demo练习。rails的创始人DHH当年用一个视频演示了如何在15分钟内搭建一个博客系统,展示除了rails的优雅与灵活,也让更多的...

使用Ruby On Rails15分钟打造一个博客系统

控制台创建一个博客项目 rails new blog cd blog rails g scaffold post title:string text:text ra...

GitLab,是一个使用 Ruby on Rails 开发的开源应用程序,与Github类似,能够浏览源代码,管理缺陷和注释,非常适合在团队内部使用。 官方只提供了Debian/Ubuntu系统下的安

GitLab,是一个使用 Ruby on Rails 开发的开源应用程序,与Github类似,能够浏览源代码,管理缺陷和注释,非常适合在团队内部使用。 官方只提供了Debian/Ubuntu系统下...

Ruby on Rails + MySQL在windows64位系统上的配置

我给出我pei'zhi'hao'de 一、RoR+MySQL环境配置: 1.系统与软件环境: OS:windows 7 ultimate64 bit Ruby:version 1.9.3 R...

ruby on rails学生选课系统

  • 2009年05月22日 07:46
  • 1.83MB
  • 下载

ruby on rails在线考试系统

  • 2010年04月16日 17:17
  • 177KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[rails] 我的订餐系统 -- 小试ruby on rails
举报原因:
原因补充:

(最多只允许输入30个字)