0%

Ruby on Rails 網站開發 練習 - 010 (Add Candidate有欄位沒填寫,顯示錯誤訊息,並且加上紅色外框提示)

已經知道有資料驗證的機制,現在要透過CSS的方式在Add Candidate頁面上製作出一些美化效果。

在終端機輸入 rails c
宣告一個變數 c1 = Candidate.new
呼叫 c1 會看到所有值是nil]


之後再輸入 c1.save

這裡會看到 false 是因為 資料驗證的時候發現目前資料的內容不符合儲存的格式,所以出現 false 。


再輸入 c1.errors

會看到資料驗證時發現有error的表單樣式。


這時輸入 c1.errors.any?

表示詢問 c1 你資料驗證有發現任何錯誤嗎?會看到 true 表示它的回應是有喔,有發現。


整個流程說明:
從一開始的c1.save 有嘗試要存入資料,後面的 c1.errors.any? 才會看到 true

否則一開始就輸入c1.errors.any?得到的回應是false


那我們接著輸入c1.errors.full_messages
會得到我們出現錯誤的地方是哪裡

因為我們驗證資料只有針對Name的項目進行判斷,所以會看到這個錯誤訊息,當然我們是可以再增加其他的資料驗證判斷條件。


不過我們現在是要讓頁面可以顯示出來錯誤訊息。
new.html.erb
我們增加指令


利用<ul><li></li></ul>的方式,執行if @candidate.errors.any?迴圈,如果有錯誤訊息,就把訊息放到<li>裡面


打開瀏覽器


雖然有正確地顯示出來errors.full_messages,但同時我們也發現了Name欄位跑版的問題,所以這時候,我們可以去app/assets/stylesheets/application.css,看到裡面有很長一串註解,但其實不是註解是有意義的,尤其是最後兩行

這是跟打包有關係的,所以不可以亂刪掉。這邊只是要介紹CSS相關設定可以寫在哪些地方。
我們要在app/assets/stylesheets目錄底下手動新增一個candidate.scss檔案,就可以把我們要的CSS相關設定寫在這邊。

application.css因為有那兩行指令,所以也會把app/assets/stylesheets目錄底下其他的 SCSS 一起打包。
這邊可以來測試看看,在candidate.scss裡面我們幫body增加背景顏色紅色。

再打開瀏覽器看看,確實背景顏色變更了。


那我們來找出哪邊要修改,所以一樣讓新增候選人頁面出現錯誤訊息,但我們打開檢查來看看是哪裡跑版。發現有個<div class="field_with_errors">,這裡是有問題的。

我們期望的頁面顯示是兩個欄位對齊排在同一行,不要輸入匡欄位被往下面壓下去,所以我們可以對剛剛找到的那個<div class="field_with_errors">設定它的style。

我們再回到瀏覽器來看看,真的有對齊了沒有跑版。

如果社時候我們想再多給它一些畫面上的美化,譬如提醒使用者欄位記得填寫,欄位框是紅色框框。那我們就可以在candidate.scss這邊再給field_with_errors這個class其他的 CSS style。

此時SCSS 它厲害的厲害的地方,就可以展現出來了。SCSS可以寫巢狀CSS。

這邊設定input type 是text的元件,讓它的外框是紅色,然後外框的寬度是1px。表示在field_with_errors這個class裡面有input且型態是text的話,都套用一樣的CSS style 設定。

打開瀏覽器看看畫面效果如何,確實有出現紅色邊框。

如果像要旁邊的Name也一起顯示紅色。那我們可以再SCSS裡面多增加一個CSS選取器。要針對label才可以。所以我們可以這樣寫CSS sytle。

再打開瀏覽器看看,是否呈現我們想要的效果。確定有

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