已經知道有資料驗證的機制,現在要透過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/)