2014年4月18日 星期五

Ruby on Rails 的 Controller 初學雜記

新手上路,如果有寫錯,歡迎拍磚 :P

這篇筆記記錄了 Ruby on Rails (以下簡稱 ROR) 關於 Controller 的相關記錄。

熬夜看了 Code School 的 railsforzombies 之後,提到 controller 是一個 App 的 Brain 真是一點都沒錯。(我看的是 http://railsforzombies.org/ 系列),這個系列的影片每打開一次就要聽一次片頭曲,有點煩就是了,都是一些殭屍的動畫,不過這個系列,免費觀看,讚。

接著又順便參考了 RailsGuides 的 Creating a New Rails Project,別怕,請服用。


MVC
Ruby on Rails 遵循 MVC 的架構,這章是在簡單的記錄 C 的部分。


Controller
controller 是用來接收某個 http request 之後決定做出什麼樣反應的功能,也跟你的 routing 設定有些關係, routing 設定能決定接收 request 之後,該由哪個 controller 處理。通常來說,每個 controller 有一個以上的 routing,不同的 routing 也可以對應到某個 controller 的某個 action,action 通常的用途則是去跟 model 要資料,然後把資料,丟給 view (也不一定完全都是要去資料,也可以單純地只是對應到某個呈現給 user 看的 view),端看需求而定。



現在就來建立新的 application:
rails new wblog


如果要建立一個 hello 的 controller,而且 action 是 index:
rails generate controller hello index


接著 Rails 會自動幫你產生一些檔案:
   identical  app/controllers/hello_controller.rb
       route  get 'hello/index'
      invoke  erb
       exist    app/views/hello
   identical    app/views/hello/index.html.erb
      invoke  test_unit
   identical    test/controllers/hello_controller_test.rb
      invoke  helper
   identical    app/helpers/hello_helper.rb
      invoke    test_unit
   identical      test/helpers/hello_helper_test.rb
      invoke  assets
      invoke    coffee
   identical      app/assets/javascripts/hello.js.coffee
      invoke    scss

   identical      app/assets/stylesheets/hello.css.scss


你所需要注意的事情是
  1. 知道 hello 這個 controller 的檔案是放在 : app/controllers/hello_controller.rb
  2. 而 hello 的 view 檔案是放在: app/views/hello/index.html.erb
再來你可以注意到 route get 'hello/index' 這一行,這表示你的 routing  接收 hello/index 的請求, 你可以開啟 http://localhost:3000/hello/index 這個頁面看到畫面:

這個 hello/index 的 routing 寫在 config/routes.rb,打開就會看到前面幾行有:
Rails.application.routes.draw do

  get 'hello/index'

controller 目前我就先看到這個部分。
可以試著嘗試建立其他 controller 以及 action,並且學著設定 routing,修改整個 application 的進入點到哪一個 controller 等等。


Convention over Configuration

每種語言或是框架,都會有自己的設計思維, Rails 的性質有 convention over configuration,縮寫是 CoC,中文叫做約定優於配置,其實就是用一些規範跟常規,簡化開發的工作。這個部分若要舉例,其實應該從整個 Rails App 整個目錄結構開始,比方說整個 app 資料夾底下的 view/model/comtroller 資料夾,放置屬於各自的 MVC 的檔案,就是一種規範,讓開發者了解什麼程式該放到哪邊。或者像是某個 controller 的命名,也牽涉到 model 的檔案命名,函式的定義,view 的檔案名稱定義等等。


參考:





沒有留言:

張貼留言

若你看的文章,時間太久遠的問題就別問了,因為我應該也忘了... XD

Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...