efa's blog

          以用戶角度出發,你就已經成功一半了.

          導航

          <2014年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          統計

          常用鏈接

          留言簿(18)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Bi report

          dba

          info security

          other

          perl

          php

          python

          tech blogs

          tech websites

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          [rails] 我的訂餐系統 -- 小試ruby on rails

          • 前言
                    近期在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 閱讀(15780) 評論(28)  編輯  收藏

          評論

          # re: 我的訂餐系統 -- 小試ruby on rails 2005-08-15 14:59

          莫非是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 江南白衣@ITO

          又多一個ror 扇子阿,非常詳細,贊。  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2005-08-30 12:19 bb

          Ror 出1.0的時候可能會好點。
          0.13號稱是1.0 Milestone版本前的最后一個版本了  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2005-08-30 12:19 lu lin

          作者的文章好詳細,推介。  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2005-09-01 12:46 Water Ye@ITO

          沒有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 David Xu

          對網頁設計還一竅不通,怎么那么快學習ruby了?
          建議先學習一下基礎 ^-^,慢慢來  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2005-10-22 11:23 jasper

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

          :代表什么?

          不加“:”不行嗎?  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2005-12-06 23:08 jacky000

          性能還不錯啦,就是啟動的時候要慢一些。  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2005-12-09 21:26 cjl123

          請問作者怎樣能顯示出中文字出來  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2006-02-14 22:58 Anubis

          嘿嘿,兄臺把源碼交出來吧  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2006-02-16 12:45 davidxu

          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 kc

          不錯!up  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2006-07-10 09:21 kevin_001

          再簡單也只是一個腳本語言,一個玩具而已。

          各位有用ruby開發項目的嗎?  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2006-07-24 18:46 kc

          上面的兄臺真是挺幼稚的。  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2006-09-04 10:13 misubaby

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

          暈死了,上面這句話始終沒有作用,傳不了參數!!!  回復  更多評論   

          # 晴軟網上訂餐系統V2.0 2006-09-28 09:01 晴軟

          晴軟在線訂餐系統 V2.0
          演示:http://www.fj3x.com
          除了少部分沿用了V1.2的功能外,大量的擴充了新的功能。
          主要新加入的功能有:自動更新訂單列表、訂單打印、多分店多城市地區管理、餐幣消費折扣、充值卡、消費積分及積分排行、多層次管理員、購物籃結合訂餐者實現團體訂餐、多狀態訂單、各分店獨立管理、配送員與訂單結合、圖形統計與財務結算、以及人性化的后臺操作界面。
          歡迎朋友們加入網上訂餐行列!
          詳細說明 http://www.qruan.com/order2-0.asp
          演示:http://www.fj3x.com
          程序下載地址一:http://www.qruan.com/rong/qruan.rar
          程序下載地址二:http://www.fj3x.com/qruan.rar
          相關文章:http://www.qruan.com/bbs/dispbbs.asp?boardID=6&ID=386&page=1  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2006-10-15 20:31 fly

          就是啊,不了解就不要亂說,最討厭這種人了@kc
            回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2007-03-28 16:11 應用之美

          謝謝了,收獲很多 :)  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2007-04-04 15:10 點石金科技

          不錯  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2007-09-24 15:28 am

          學習。寫得挺好的。  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2008-03-10 20:21 牛仔

          我下載來做做看怎么樣 ,  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2009-01-02 20:13 sudi

          速遞網上訂餐系統免費使用和下載

          官網:http://www.dc135.cn
          演示網站:http://www.dc135.cn/index.aspx
          演示后臺:http://www.dc135.cn/admin/login.aspx
          管理員登陸帳戶跟密碼都為:admin

          下載網址:http://www.dc135.cn/download.aspx  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2011-12-31 13:47 快樂大本營

          博主厲害!  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2014-11-26 17:43 btbear

          @kevin_001
          上面的兄臺真是挺幼稚的  回復  更多評論   

          # re: [rails] 我的訂餐系統 -- 小試ruby on rails 2014-11-26 17:43 btbear

          上面的兄臺真是挺幼稚的  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 靖安县| 涿州市| 扎赉特旗| 长治县| 金沙县| 德格县| 南郑县| 越西县| 万盛区| 宣城市| 新竹市| 孝昌县| 成安县| 蓬安县| 安吉县| 射洪县| 卢龙县| 桓台县| 广汉市| 高台县| 新巴尔虎右旗| 辽阳市| 永安市| 榆中县| 涞源县| 正定县| 达拉特旗| 南陵县| 土默特左旗| 鹰潭市| 北宁市| 容城县| 楚雄市| 鹤峰县| 五华县| 龙游县| 金川县| 庄河市| 惠东县| 克什克腾旗| 岐山县|