0%

Ruby on Rails 網站開發 練習 - 009 (建立show action & show 的 view)

回到CandidatesController裡面,來新增show action。至於要放在哪個地方都可以,只要不要放到private method下面就行。
這邊我們就把show action新增在index action的下面。

存檔完,回到瀏覽器點擊任何一位候選人,看看頁面會出現什麼訊息。沒意外的話,應該會看到沒有樣板(no template)的訊息。果真出現了!!!


所以這個時候,我們就來做一個 show 的頁面給它。進入到view/candidates/新增檔案show.html.erb

我們測試一下,點擊第一個(id=1)候選人’ccc’,看看會呈現什麼樣的畫面。

從上面的圖片可以看見,我們在show.html.erb檔案新增的<h1>Candidate Information</h1>有確實的顯示在瀏覽器頁面,且觀察網址列可以確定現在是在id是一號的候選人的頁面了。


回到CandidatesControllershow action這裡,它應該要做的事情,就是把某一個候選人的資料調出來。但是它要怎麼去調呢?

  • 根據id去把對應的候選人資料調出來。

我們切換到終端機,來看看rails server再跑的時候顯示的一些資訊,可以看到有一包Parameters: {"id"=>"1"}

表示點擊候選人之後,會有一個對應的id被捕捉到Parameters這個變數裡面。
所以我們得知可以透過params裡面id這個值拿回來用,把這個值放到show action 裡面。


假設今天我們要拿2號候選人的資料,這個時候我們就試著請CandidateModel 去抓2號候選人的資料。
這邊就可以使用find_by(key: value)的方法去抓我們要的id的資料。


這時候給它一個變數來承接它@candidate = Candidate.find_by(id: params[:id])。至於為什麼要給它一個變數,是因為等下在view的部分會使用到。


此時我們進到view/show.html.erb來把<h1>標籤更改為<h1><%= @candidate.name %></h1>,表示我們要印出候選人的名稱。

打開瀏覽器看看畫面,真的有印出每個id對應的候選人名稱。



既然如此,我們也可以印出其他的欄位資料,包含政黨、年紀、政見等等。
這邊我們用<ul><li></li></ul>的方式呈現這些欄位資料。

那接著就可以打開瀏覽器來驗證一下,是否會出現一個列表有我們要的欄位資料。
在瀏覽器執行重新整理後,果真畫面上出現了我們想看到的列表清單。

上圖顯示的欄位資料也確實是我們想要抓到的資料。


可是呢?我們今天也要考慮了其他的情況,假設今天使用者在網址列需要輸入id的位置,不小心打錯打成100,這時候會看到錯誤訊息

說 nil 找不到 ‘name’ 這個方法,為什麼會有 nil 呢?這個 nil 表示id=100這件事情是不存在的,所以得到一個nil回傳值。因此,我們可以回到show.html.erb檔案裡面,增加一個if...else...的判斷式。
>因為在Ruby的世界,只有兩個東西會是false
1. false 本身 ==> false
2. nil ==> false

所以我們可以使用這樣的寫法

如果 @candidate 是有東西,就執行下面第2-8行code
其他的話就在畫面上印出No Record found!!!
重新整理瀏覽器頁面,一樣是讓網址列的 id 輸入 100,這時候顯示的就不是錯誤訊息的畫面,而是No Record found!!!


目前這樣我們的 show action & show.html.erb算是完成了


這時候發現前面新增候選人的頁面忘記加上CSS強化視覺效果,所以下一堂課,來做畫面的CSS吧

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