iT邦幫忙

DAY 3
11

Rails 的簡單任務系列 第 3

[RoR] 簡單完成 CRUD 的動作

所謂的CRUD是指 新增(Create)、讀取(Read)、更新(Update)、刪除(Delete);有時會聽到「五個動作」,就只是再加上一個列表(List)的動作,RoR可以一次就包辦起來,在自己還沒搞清楚怎麼去寫這些從網頁來操作資料庫的動作前,就可以運作了。
為何用SQLite
在rails 2.x 版後,預設操作的資料庫是 SQLite3,而Rails 1.x版便是大家較常用的MySQL為預設,所以只要執行 rails test1 不加參數就會以預設的資料庫來使用,若用 rails test1 -d mysql 就會採用所指定的資料庫為對象。前提是要先裝好ruby 去操作該資料庫的library。

在RoR下做初期的開發時期,較常用SQLite來操作,是因操作簡單,在量少而規模還不是很大的資料量情況下,是比MySQL來得快速些;當要正式上線時,才把資料庫換為MySQL,才能有效處理大規模的資料量。

基本上,SQLite在資料庫的基本操作及表格間的關聯功能上,在剛發展測試是足夠的,而且處理中文上,至少在UTF-8的環境下沒什麼問題。

第立第一個測試計畫
這一系列都在自己的家目錄 /home/ironman 來建立範例:

#建立一個Project
rails test1
#建立一個可寫「標題」、「內容」的雛型:
# 一定要進入該Project目錄,再作其他動作才有效
cd test1
# 建立一個 article 的 model 為指定其欄位
./script/generate scaffold article title:string body:text
# 將上述所產生的資料模型,寫到資料庫裡面
rake db:migrate
#啟動web server
thin start -d
# 若有裝 mongrel 執行
# mongrel_rails start -d

不加port的參數,預設是以3000的port 來開啟,若是遠端操作,就別忘了開iptables的port出來才可連上。
然後 http://IP:3000/articles/ 就可看到畫面,而可以操作CRUD等五個動作。

最簡陋的簡單應用
這個scaffold的動作,產生了最粗略的資料庫操作界面,假設自己做靠自己增減的公佈欄、或只有自己post文章就好的話,就可以這個為基礎,,再自行修改一下呈獻畫面的方式;至於公開在網路上,當然就要做一個,沒有新增、刪徐、編輯、更新界面的同樣東西。

每個RoR的Project是由MVC(Model, View, Control)所架構,Model,上述的例子就是article,scaffold產生其model在 app/model 之中的article.rb,,而後面直接下了 欄位:屬性,也把這個model 名稱加上 s 為資料庫的 table,並把欄位屬性產生在 db/migrate 之中;同時把操作資料庫的CRUD等五個動作,寫到 app/controlers 之中,也把如何呈獻的html碼的template寫到 app/views/articles 裡面,相對到Controller中的動作。

./script/generate controller blog index show

這樣就產生了一個 blog 的controller以及 index 、 show 兩個動作及相對應的view出來,但內容都是空的,這時只要把 app/controllers/ 的 articles_controller.rb 中的 index 及 show 的內迥,貼到 blog_controller.rb 之中,再把 app/views/articles 的index.html.rb 及 show.html.rb 複製到 app/views/blog 之中,並且將有編輯、刪除、新增等連結給刪除掉,將index.html.rb 有關 show 的語法改方:

<td><%= link_to 'Show', :action => 'show', :id => article.id %></td>

這樣就不會跑到 articles 的 show 的動作中。而app/views/blog/show.html.rb中更改一下 Back 的連結為:

<%= link_to 'Back', :action => 'index' %>

就可回到 blog 的 controller 之中的 index 了。

若要在不同的動作上,都會有一致的template呈獻的話,可在 app/views/layouts 之中編輯一個 blog.html.erb,可參照同目錄之中的articles.html.erb的寫法。

讓網頁的根目錄出現指定的畫面
所以當告訴人只有可view而已的網址則是: http://IP:3000/blog/ 若希望能把那個 blog 的路徑去掉直接 http://IP:3000 就可以看得到的話,修改 conf/routes.rb
在 map.resources :articles 的這一行下面加入:

map.root :controller => "blog", :action => "index"

然後,一定要把 public 目錄中的 index.html 給移掉,才不會被哪一頁給擋住,基本上thin可以不用啟動的情況下,http://IP:3000/ 就可以看到文章的列表了。


上一篇
[RoR] Rails 環境建置及更新問題
下一篇
[RoR] 用 nginx 作為 RoR 的前端
系列文
Rails 的簡單任務33

1 則留言

0
gric
iT邦高手 1 級 ‧ 2009-03-13 14:40:30

謝謝分享咯!

我要留言

立即登入留言