0%

Ruby on Rails 網站開發 練習 - 006 (資料清洗 data cleaning)

練習 - 006 (資料清洗 data cleaning)

首先在CandidatesControllercreateaction,我們宣告一個變數clean_params承接清洗過的資料。

1
2
3
4
5
6
7
8
9
10
11
12
def create
clean_params = params.require(:candidate).permit(:name, :party, :age, :politics)
# require方法,表示只要params裡面的candidate資料
# permit方法,只允許cadidate中的部分欄位可以過來
@candidate = Candidate.new(clean_params)
# 把清洗過的資料`clean_params`放到`Candidate.new(clean_params)`,作為Candidate.new()的參數
if @candidate.save
redirect_to '/candidates'
else
# NG
end
end


打開瀏覽器來看看
首先各個欄位填入資料

按下送出,存檔。直接跳回後選人的列表頁。


這樣表示是有資料 寫入成功 了,才會跳回候選人列表頁面。
要如何確認呢?
我們可以透過終端機的中控台模式來查看
在終端機輸入rails c --sandbox 表示打開 rails console 沙盒模式


接著入輸入Candidate.all。這個指令可以show出,現在Candidate表單裡面所有的資料。
可以發現有一包陣列,包含了id, name, party, politics, votes等欄位。
就是剛剛我們在瀏覽器上輸入的那筆資料。


但是,到這邊可以發現好像缺少點什麼,資料是成功寫入資料庫,但直接跳回候選人列表的頁面,這樣的使用者體驗不太優。似乎少了點提示,讓使用者知道到底有沒有投票成功。所以我們就來增加這個功能吧!!!

回到CandidateControllercreate action,我們來寫個提示(flash[])。


接著我們在index.html.erb 把那flash[] 給印在頁面上。
flash[]的特點就是,只要頁面有印過一次,頁面重新整理後,也不會再出現。


我們就在新增一位候選人看看,是否真的有出現flash[]


按下送出按鈕,真的有出現提示!!!


現在確定功能有正常顯示,接著我們來做程式碼的整理,讓程式碼可以更乾淨,可讀性更高。
首先,在CandidatesControllercreate action清洗資料的那行,等號右邊有點太長了。

1
clarn_params = params.require(:candidate).permit(:name, :party, :age, :politics)

之後還會有其他的 aciton 會需要使用,所以我們可以用一個方法把它包起來。
這樣一來原本的

1
clarn_params = params.require(:candidate).permit(:name, :party, :age, :politics)

就可以整行拿掉。


因為candidate_params只會在這個class底下內被呼叫,不會被其他的class取用。所以我們可以將它變成一個private method。因此我們給它一個註記


下一堂課程,將學習,如果存檔失敗,要如何執行。

參考來源:為你自己學 Ruby on Rails (https://railsbook.tw/)