1.4 第一個HelloWorld
1、檔案功能
檔名 | 功能描述 |
---|---|
app/ | 有Controllers(控制檯)、Models(模型)和Views(檢視)資料夾,接下來的內容主要都在這個目錄。 |
config/ | 應用程式設定檔、路由規則、資料庫設定等等 |
db/ | 資料庫的對映檔案 |
lib/ | 放一些自定義的Module、Class |
Gemfile | gem外掛列表,可以指定外掛的版本 |
README | 專案的使用說明 |
2、網頁請求路徑
當網頁傳送一個請求,首先我們會根據網頁請求路徑以及路由(route.rb)裡面的程式碼,來確定分配到哪個控制器(controller)中,控制器將請求處理之後,將資料傳送給檢視(view)顯示。
3、HelloWorld
(1)連線遠端,開啟專案檔案目錄(cd /vagrant/data_system),咱們開始編寫第一個HelloWorld,執行rails g controller home index,其中home代表controller,index代表action方法
vagrant@vagrant-ubuntu-trusty-64:/vagrant/data_system$ rails g controller home index
#系統返回資訊
create app/controllers/home_controller.rb
route get 'home/index'
invoke erb
create app/views/home
create app/views/home/index.html.erb
invoke test_unit
create test/ controllers/home_controller_test.rb
invoke helper
create app/helpers/home_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/home.coffee
invoke scss
create app/assets/stylesheets/home.scss
我們在sublime開啟data_system專案,看到app/controllers/home_controller.rb資料夾下會有以下程式碼,可以看到系統自動生成了一個HomeController類,以及一個index方法:
(2)在路由(config/route.rb)檔案中改一下程式碼
#原始碼
get 'home/index'
#改成
get "home/index" => "home#index"
意思是http://localhost:3000/home/index網址對應到HomeController中的index方法。
(3)我們再開啟app/views/home/index.html.erb檔案,將裡面的程式碼全部刪掉替換成下面程式碼,不要忘了儲存檔案哦~
<h1>Hello, World!</h1>
然後rails s啟動專案,在瀏覽器中開啟http://localhost:3000/home/index頁面(注意mac電腦是http://192.168.33.10:3000/home/index)出現Hello,World!
4、新生疑問點
主要將我當時剛學習ruby時的困惑,我在這裡梳理一下。
(1)Controllers(控制檯)、Models(模型)和Views(檢視)還有route.rb(路由)是什麼關係,程式碼執行順序是怎樣的?
答:在瀏覽器輸入http://localhost:3000/home/index連結,會根據home/index對應到route.rb檔案中的get “home/index” => "home#index”路由,根據路由home#index找到home_controller中的index方法,方法中可能會有例項變數傳遞給view模板,也就是views/home/index.html.erb檔案。這是ruby on rails的規則,都是根據home和index找到對應的檔案,所以檔名稱(比如home/index.html.erb、home_controller)要按照規則來,不能亂改。
(2)如果出現錯誤如何去檢視錯誤原因以及排除錯誤呢?
答:我們先製造一個錯誤,在路由(config/route.rb)檔案中程式碼改成,將英文雙引號" 改成中文雙引號“
#原始碼
get "home/index" => "home#index"
#改成
get "home/index" => "home#index”
然後重啟專案(ctrl+c停止專案,rails s啟動專案),在終端會出現以下錯誤,SyntaxError錯誤是語法錯誤,程式寫的不合規範就會報此錯誤。下面是錯誤的詳情,明確指出了是config/routes.rb檔案中的第5行少了一個end。我們開啟config/routes.rb檔案,看到裡面第二行有一箇中文雙引號,導致字串沒有正常結束,導致第五行的end被當成了字串,我們將第二行的雙引號換成英文的,然後重啟專案就可以了。
當我們遇到錯誤的時候,首先看終端返回的資訊,一般都會明確指出錯誤的具體位置,後面我們在專案中遇到的錯誤,會具體情況具體分析。
注意:
當我們重新修改了routes.rb、controller、config檔案等都需要重新啟動專案。修改views檔案不需要重新啟動專案。