練習 - 003 (新增一個候選人model)
產生 model 的過程會順便建立一個資料表(table)
model 是一個抽象的概念,不是實體存在的
使用終端機輸入指令的方式,來建立 model 和 migration
1 | rails g model Candidate name party age:integer politics:text votes:integer |
可以發現 model 檔案名稱是 “單數”
對應的db資料夾內migration中的 class 名稱開頭 大寫”複數”且駝峰式
然後當中對應的 table 是 小寫”複數”
另外想要讓所有候選人的票數一開始都是 0 票,所以我們先在migration裡面的table 中,votes欄位先增加一行default: 0
。給預設值的概念。
這時候我們再執行rails db:migrate
,且重新打開瀏覽器
接下來要製作一個簡單的表單
- 要先製作表單前,要先找門口阿姨(Route),請route告訴我們路徑該怎麼走
終端機中輸入rails routes
,會顯示出對應的路徑/candidates/new(.:format)
進到index.html.erb
新增一個超連結<a href="/candidates/new">Add Candidate</a>
打開瀏覽器畫面,就可以看到剛剛新增的超連結
因為 Routes 告訴我們,如果點擊超連結,會帶我們找到candidates#new
這個方法,點下去,登愣!!
找不到 new 這個 action。那我們就做給它。
回到candidates_controller
,定義一個叫做 new 的 action(方法),存檔。
再次打開終端機,登愣!!!出現新的錯誤訊息。
跟前面建立 index 時候一樣,少了 new 的樣板,所以我們進到 view/candidates 資料夾裡面,新增檔案new.html.erb
,存檔。
重新整理瀏覽器,可以看到畫面了。
有畫面了,那我們就可以開始製作表單囉
action
表示要往哪個地方送method
表示要用什麼方法送
我們需要請routes告訴我們往哪裡送。按下超連結後,我們要去candidates#create
所以action=
後面要接的是/candidates
==>form action="/candidates"
先幫我們的表單加上一個輸入匡
點下去”送出”按鈕後,會看到錯誤訊息(看到是正確的)
前面已經有經歷過 index、new 兩個 action 的步驟,所以這次當然也是一樣囉,找不到 create action ? 那就做一個給你。
回到camdidates_controller
,定義一個create action
。
存檔,重新整理瀏覽器,應該就可以順利了。咦?怎麼跳出一個沒看過的錯誤訊息。
為什麼會出現這個錯誤訊息,由下一堂課來講解。
model 是.rb 檔案類型
ex: candidate.rb
model 是一個資料表
對應的是 db 裡面的檔案,名稱開頭是大寫,且資料表名稱英文複數型
ex: class Candidates < ActiveRecord::Migration
這就是 Rails 慣例
慣例優於設定
參考來源:為你自己學 Ruby on Rails (https://railsbook.tw/)