RESTful Rails 2.0:part 2 : 從scaffolding中學習

如同DHH在AWDR2中所說的,scaffold最大的用途應該是拿來學習Rails的精神,並且利用scaffold提供的基本CRUD建立出更複雜的功能。雖然有些時候,我們的確只需要那些基本的CRUD就夠了。XD

總之,接續上次的scaffold教學,這次我們來看看scaffold到底產生出了什麼東西。

打開app/controllers/post_controller.rb。會看到index, show, new, edit, create, update, destory七個action。

參考下表:

route HTTP動詞 對應的controller action
posts GET index
posts POST create
post(:id) GET show
post(:id) PUT update
post(:id) DELETE destory
new_post GET new
edit_post GET edit

每一個controller action都剛好對應到一種動作,就靠這七個動作就可以解決所有的CRUD,而且是REST style :)

用一個action作為例子:這個是index action:

def index
 @posts = Post.find(:all)

 respond_to do |format|
   format.html # index.html.erb
   format.xml { render :xml => @posts }
 end
end

扣掉respond_to那個block的話,其實整個action的內容就如同以前一樣,
只有「Post.find(:all)」。那respond_to究竟是幹麼的呢?其實就只是根據使用者不同的要求來決定回傳的格式而已。詳細解說的部份就先暫時跳過,那段block應該很容易看懂XD再來打開app/views/posts/index.html.erb,會發現原本「edit」跟「new post」這兩個連結的tag好像連到了奇怪的網址。

究竟edit_post_path(post)跟new_post_path指的是什麼呢?由於整個scaffold是REST的風格,每個資源都會有一個固定的位址連結到它,所以這兩個path只是Rails為了增加可讀性而產生的佔位。事實上,「new_post_path」指的就是「posts/new」這個網址。「edit_post_path(post)」指的就是「posts/:id/edit」這個網址了。另外還有url,代表的是完整的網址。可參考這個表格:

posts_url http://localhost:3000/posts
posts_path /posts
new_post_path /posts/new
edit_post_path(post) /post/:id/edit
廣告

發表迴響

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

WordPress.com Logo

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

Twitter picture

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

Facebook照片

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

Google+ photo

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

連結到 %s