---
# System prepended metadata

title: rails 純手工打造
tags: [Ruby]

---

###### tags: `Ruby`
# rails 純手工打造

rails routes(終端機指令) 可看見所有路徑


1. 在routes.rb裡加上resource :candidate(範例)
2. ![](https://i.imgur.com/S8PZxt9.png)找不到controller

3. 到controllers裡面新增 candidates_controller.rb
4. ![](https://i.imgur.com/Slv6qv7.png)在檔案中命名class並繼承至ApplicationController(慣例CandidatesController要加s)
5. ![](https://i.imgur.com/QAS2CWB.png)找不到view
6. ![](https://i.imgur.com/IMtRWVE.png)                      **慣例:CandiatesController對應到views裡面的candidates資料夾，所以要在views裡建立此資料夾**
8. ![](https://i.imgur.com/nO4gBaq.png)在controller裡def index 並且在candidates裡新增index.html.erb使之對應
9. ![](https://i.imgur.com/xh3mA3h.png)使用終端機建立model下指令後創造出Candidate的model以及migration檔![](https://i.imgur.com/nzEZ82H.png)

10. 在終端機下 rails db:migrate 將資料寫入資料表![](https://i.imgur.com/6iTMjR4.png)

# 製作表單
1. ![](https://i.imgur.com/gBIQel7.png)找路徑
2. ![](https://i.imgur.com/8nR10Hr.png)沒有new這個action，做給他
3. ![](https://i.imgur.com/1hpbVPh.png)
4. ![](https://i.imgur.com/OvDSRjH.png)沒有view，做給他
5. ![](https://i.imgur.com/EWM7dF1.png)
6. ![](https://i.imgur.com/5T0Cvkt.png)用POST方法做表單，post對應到create action
7. ![](https://i.imgur.com/A4AfD6O.png)製作表單
8. ![](https://i.imgur.com/hDHE533.png)畫面中按下go!之後顯示找不到 create這個action的頁面
9. ![](https://i.imgur.com/rDTh7q4.png)做給他!
10. ![](https://i.imgur.com/kBgTmgL.png)表單需要authenticity token否則可能遭有心人士偷傳資料近來
11. ![](https://i.imgur.com/JsOzex4.png)加上authenticity token
12. ![](https://i.imgur.com/4E2kBzq.png)formhelper寫法，可將Candidate.new寫在controller裡的new方法並將其指定給@candidate這個實體變數供這裡使用
13. ![](https://i.imgur.com/GlxOTgC.png)  畫面呈現
14. ![](https://i.imgur.com/WNiPTOf.png) 設定create 將資料寫進資料庫
15. ![](https://i.imgur.com/mm02XpX.png)出錯! 原因:資料未經驗證系統檔下，因為雖然表單已設定好但使用者仍可以在頁面上手動增加欄位。
16. ![](https://i.imgur.com/tLOwtLa.png)做資料驗證，隨後再加上提醒(flash)來提醒使用者提交成功。
17. ![](https://i.imgur.com/QM1Uzyb.png)填入失敗時使用reder :new來借new的頁面來重新渲染而不是再到一個新的頁面，並且表單會在抓一次@candidate的資料再填入這樣就不用再填一次，也因為前面刻意將new、create的變數設為@candidate所以在這個情況可以這樣操作。

# 讓candidate資料顯示在index頁面
1. ![](https://i.imgur.com/2OFjpq8.png)設定@candidates撈出所有資料
2. ![](https://i.imgur.com/3mvwvMA.png)在index頁面建立表格，想將name設為超連結並將politics放在那裏面但該導向哪裡?
3. ![](https://i.imgur.com/mwk0k2N.png) 找到路徑，並且得知會指向show方法
4. ![](https://i.imgur.com/8cs7Fnk.png)![](https://i.imgur.com/pPgvHvW.png)
換上便可以使知道每個id的頁面
5. ![](https://i.imgur.com/XT6LE50.png)用link_to取代 a
6. ![](https://i.imgur.com/XhmqiqX.png)"/candidates/new"可以使用new_candidate(後面可以加東西)來替代
7. ![](https://i.imgur.com/cYM1Sbs.png)像這樣子
8. **這樣子做有什麼好處呢??** 
1.打錯字時會出錯 2.只要在candidate.rb裡下指令就可以改變網址的內容![](https://i.imgur.com/zugggt5.png)![](https://i.imgur.com/jLT9pG4.png)
9. ![](https://i.imgur.com/WzAvyao.png) 更改後的樣子最後記得將id參數給路徑
10. **建立show頁面** ![](https://i.imgur.com/7fs8mu6.png)
先建立action 且設變數
11. ![](https://i.imgur.com/3R5T72a.png)建立show的views並判斷id存不存在資料庫。
12. 

































