0%

Ruby on Rails 網站開發 練習 - 003 (新增一個候選人model)

練習 - 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/)