還記得MCV的核心構造吧? 在建立完database(M)之後就要建立起留言版的控制器了,使用之前所學的方式來設計控制器。
PS.Controller最好一個主要功能就建立一個,不要混用,要不然容易出問題。
建立Controller
首先我們來思考一下一個留言板需要具備那些功能:
*顯示留言的清單(list)
*建立新留言(new)
*編輯留言(edit)
*刪除留言(delete)
*回覆留言(reply)
*顯示留言全文(show)
*在資料庫中建立留言的資料(create)
因此我們針對以上功能打入指令:
$script/generate controller post list new edit delete reply show create
建立完成後,我們運行Server看有沒有建立成功
$script/server
網址列打上http://localhost:3000/post/list
如果出現畫面就是建立完成了
接著來設計Controller的控制方式
設計Controller的運作方式
我們一開始進入post的頁面理應是list,也就是留言清單的部分,在顯示清單前總要先有一筆資料建立起來
因此在list.html.erb中加入按鈕的ruby程式(list.html.erb檔案在app/views/post/底下)
<%= button_to "New Post",:action=>:new %>
重新整理網頁看看是否建立起轉址了。
接著在new頁面中我們要設計讓使用者輸入的區塊,因此編輯new.html.erb
<% form_tag url_for(:action=>:create) do %>
<%=label_tag "Title" %>
<%=text_field_tag:title, "預設值(可沒有)" %>
"hr" (因為blog的關係才要加雙引號,真正打請改成用<>包覆才是html的語法)
<%=label_tag "body" %> "br"
<%=text_area_tag:body %> "br"
<%=submit_tag "Create" %>
<% end %>
其中需要說明的應該只有第一行跟最後一行而已,其它自己一看就懂了,第一行代表這是一個區塊,當這個區塊送出一個tag(也就是submit_tag按下這個按鈕後),就將網址轉到create。
現在問題來了,我們該怎麼把這個網頁(new)打的東西傳到create來做資料庫的資料建立呢?
這時就要透過Controller來進行控制,也就是MCV的概念,當使用者在views的網頁中操作完成後,views要把操作的指令送給Controller作轉址,再轉址前Controller會依據設計將這網頁的內容傳入Create中,因此我們現在就來設計Controller。
編輯post_controller.rb(在app/controllers/底下)
在裡面的def create 下面加入
@title=params[:title];
@body=params[:body];
其中第一行@title代表宣告一個變數來儲存上個網頁的參數title(params[:title]),第二行也是相同道理。
接著修改create.html.erb
title=<%=@title%>"br"
body=<%=@body%>
然後瀏覽器重新整理看看是不是有把參數傳入。
接下來就要在資料庫中建立資料了
繼續編輯post_controller.rb,從剛剛的位置(@body的下一行)繼續寫起
@post=Post.new;
@post.title=@title;
@post.body=@body;
@post.save;
Post.new的P記得大寫(代表資料庫動作)
完成後重新建立起一筆新留言,然後用sqlbrowser看看確認資料已經在裡面了。
這樣就完成資料庫的資料建立,再來修改create.html.erb,讓他直接轉址回到list,然後在list中建立顯示資料的控制。
後面的其他設計就類似這種方式,在此就不多說了。
沒有留言:
張貼留言