• Rails 開發(fā)工作的大部分集中在創(chuàng)建和編輯 apps 目錄下的文件。

  • 先來(lái)了解一下這個(gè)目錄下的結(jié)構(gòu)。
    Apps 目錄下包含四個(gè)主要目錄,它們分別是 Controllers, models, views, helpers

    1:Controllers 目錄存放 rails 應(yīng)用中相應(yīng)的 controller 類,controller 類處理來(lái)自用戶的 web 請(qǐng)求。
    2:views 目錄存放相應(yīng)的模板文件,模板文件填充數(shù)據(jù)后,轉(zhuǎn)換為 html 格式傳遞給用戶的瀏覽器。
    3:models目錄存放數(shù)據(jù)模型類,模型類封裝了數(shù)據(jù)庫(kù)中的數(shù)據(jù)。很多框架在數(shù)據(jù)模型層都做的比較復(fù)雜,用過(guò) rails 后,你會(huì)發(fā)現(xiàn)它非常容易使用。
    4:helpers 目錄存放了簡(jiǎn)化 Controllers, models, views 使用的幫助類。

    編輯 controller 類
    開始使用 Rails 之前,我們需要了解一下 rails 是如何將 controller 類中的方法和 url 映射到一起的,這對(duì)于理解 rails 工作原理很重要。
    rails 在生成的 skeleton 框架中包含了一個(gè) scripts 目錄,這個(gè)目錄中包含了很多腳本程序,它們可以幫助我們來(lái)簡(jiǎn)化很多工作,我們已經(jīng)使用過(guò)了 script\server 這個(gè)腳本,它是用來(lái)啟動(dòng) webrick 服務(wù)器的。現(xiàn)在我們看看如何生成默認(rèn)的 controller 文件
    打開新的 DOS 命令行,在C:\student目錄下運(yùn)行 ruby script\generate controller MyTest

    C:\student\app\controllers 目錄中將生成一個(gè)包含 MyTestController 類定義骨架的名為 my_test_controller.rb 的文件
    鼠標(biāo)右鍵點(diǎn)擊此文件,選擇”edit” 打開編輯此文件。




    在瀏覽器中訪問(wèn) http://127.0.0.1:3000/My_Test/

    瀏覽器響應(yīng)沒(méi)有找到對(duì)應(yīng)的 index 方法,不要擔(dān)心,這不是什么大問(wèn)題,因?yàn)槟J(rèn)生成的控制器類,不包含任何方法。不過(guò)這里我們了解到,如果不輸入任和 url 連接的話,默認(rèn)rails 需要在控制器類中找一個(gè) index 的方法。這很容易理解,類似于 apache 服務(wù)器中目錄下面的 index.html 文件一樣。
    我們現(xiàn)在編輯這個(gè) MyTestController 類。
    如圖:



    重新刷新剛才的頁(yè)面 http://127.0.0.1:3000/My_Test/ ,你會(huì)看到如下結(jié)果



    在瀏覽器中運(yùn)行 http://127.0.0.1:3000/My_Test/keywen



    了解到 rails 是如何將 url 和控制器中的函數(shù)做簡(jiǎn)單映射的。

    需要做一些解釋,在運(yùn)行 ruby script\generate controller MyTest 的時(shí)候, rails 做了一些默認(rèn)的假設(shè)。 MyTest 對(duì)應(yīng)的 controller 文件是 my_test_controller.rb, 文件中控制器類名是 MyTestController,而 url 映射是 /My_Test/ .
    這些默認(rèn)規(guī)定的好處是:我不需要編輯復(fù)雜的配置文件,只要對(duì)相應(yīng)的文件做編輯就可以了。只需要關(guān)注程序邏輯,而不是其它什么,這就是 rails 設(shè)計(jì)原則中的“約定優(yōu)于配置”。

    另外我們也感覺(jué)到 ruby 動(dòng)態(tài)語(yǔ)言的好處,這點(diǎn)是 java 所無(wú)法辦到的。我們?cè)诰庉嬐?controller 后,重新刷新頁(yè)面,就可以使程序生效。對(duì)于編譯型的 java 語(yǔ)言來(lái)說(shuō),不重新編譯,重新啟動(dòng)服務(wù)器是無(wú)法做到這點(diǎn)的。Rails 開發(fā)的易用性可見(jiàn)一斑了,要知道啟動(dòng)和編譯都是非常耗費(fèi)時(shí)間的,尤其對(duì)于那些 EJB 服務(wù)器來(lái)說(shuō)更是如此。