RESTful Rails 2.0 , part 1: scaffolding

Rails 2.0是個大改版,因此許多原本的功能運作方式都改變了(像是最多人抱怨的scaffold。)Rails 2.0更大的重點是引進REST的概念(不知道是什麼的話,請參考這篇。)總之,我把我不停錯誤嘗試後的心得寫在這…

首先,開一個全新的Rails 2.0 專案。安裝跟設定的部份就省略,跟以前差不多。

1. 新的scaffold運作方式

過去的scaffold是根據某個已經建立完成的Model來動態或靜態產生Controller跟View。新的scaffold則是不需要事先建立Model,直接將MVC三部份以REST的風格建立完成:

ruby script/generate scaffold post title:string body:text

上面這行會建立:

1. 一個叫做post的model, 有title跟body兩個欄位,型別分別是string跟text。
2.一個叫做posts的controller, 跟對應的View。
3.會在config/route.rb中加入一行:「map.resource :posts」。這代表著將post這個model視為一個resource。

至於很多人會抱怨:「為甚麼連controller的名字都幫我取好!」抱歉,這是Rails 2.0所要推廣的REST風格,總是要多學學新觀念嘛。

2. 新的rake指令

如果你跟我一樣懶惰,可能會覺得每次還要手動建立資料庫是一件非常麻煩的事情。現在懶人有福啦!

執行完1的scaffold指令後,Rails會幫你建好migration,可是我們連database都還沒建立!以前就得打開書然後開始打mysqladmin…現在不用啦!直接執行:

rake db:create

Rails就直接根據database.yml裡面的設定建立好資料庫了!打開database.yml看看,會發現到現在預設的encoding就是utf8了,nice!其他的新的rake指令:

db:charset 從目前的資料庫中取得是用什麼charset的資訊
db:collation 從目前的資料庫中取得collation
db:create 在目前的環境中建立database.yml中的資料庫
db:create:all 建立database.yml中所有環境的資料庫
db:drop 放棄目前環境中的資料庫
db:drop:all 放棄所有環境中的資料庫
db:reset 放棄並重建目前環境中所有的資料庫
db:rollback 將目前的schema回覆到前一個版本
db:version 取得目前的schema版本

3.新的Migration寫法

現在打開db/migrate/001_create_posts.rb看看,就會看到新式的Migration寫法。以前我們必須不停的重複

t.column :ooo, :xxx

現在我們可以省掉那個column了!新的寫法會變成:

t.string :title
t.text :body

是不是簡單多了呢?現在就可以啟用精美的Migration了:

rake db:migrate
ruby script/server

於是就可以看到,跟以前一模一樣的scaffold畫面了。scaffold並沒有離我們而去,而是變成不同的方式在運作。

廣告

RESTful Rails 2.0 , part 1: scaffolding” 有 4 則迴響

  1. 关键是不能对所谓的资源分类是很痛苦的。总不能所有的资源都放同一根下吧。我认为至少应该支持script/generate scaffold admin/publisher 吧。但这样生成的action却是admin_publisher???!!!

  2. 如果你想要產生user/1/post/2這種資源的話,Rails是支援的
    不過要先用scaffold分別建立user與post兩個resource,然後再改route

    這叫做Nested Routes,看一下相關文件吧

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s