2013-05-29 27 views
1

新的rails,我正在做一些簡單的練習。現在我正在玩弄錯誤消息。我有一個關於這些Rails - 編輯錯誤消息的默認外觀

1的默認行爲)的所有錯誤都屬性前綴幾個問題爲什麼用變量的情況下驗證錯誤前綴的所有錯誤消息?在這種情況下,它是score。如何從錯誤消息中刪除此屬性名稱,並只顯示我的錯誤消息?有一個簡單的方法來做到這一點?

2)紅色突出顯示:爲什麼「分數」標籤和相應的輸入欄以紅色標出。根據_form.html.erb文件,他們是<div class="field">,所以我不明白這個紅色輪廓來自哪裏。有沒有辦法改變這個?

謝謝!

Error message

+0

不知道你有什麼版本的Rails,但是這裏可能有幫助。特別參見第8節。http://guides.rubyonrails.org/active_record_validations_callbacks.html#customizing-error-messages-css – lurker

回答

1

歡迎到Rails!首先,您使用的是默認的腳手架。如果你使用rails 3.2+,那麼你的樣式將位於/app/assets/stylesheets。你應該在那裏有一個名爲scaffold.css.scss的文件。這個文件就是頁面上紅色的樣式。

現在至於標記,您可以控制這些消息的顯示方式。當一個對象被保存,但驗證失敗時,該對象將有一個errors對象。

@car = Car.new(params[:car]) 
@car.save #=> false 
@car.errors.messages #=> {:make => "can't be blank", :model => "doesn't make sense"} 

正如你所看到的,在此錯誤消息的方法,對象會返回一個散列結果,其中的關鍵是驗證失敗的屬性,和值從您的驗證字符串的郵件。

這些驗證在您的模型中設置,並且可以由您完全自定義。

class Car 
    validates :make, presence: true 
    validates :model, presence: true, message: "doesn't make sense" 
end 

所以你的觀點,你可以輕鬆地做類似

<% if @car.errors.any? %> 
    <% @car.errors.messages.each do |field, message| %> 
     <!-- your custom html here --> 
    <% end %> 
<% end %> 

所以希望這有助於!

+0

謝謝!這絕對有助於澄清事情。因此,如果我理解正確,errors.messages只是一個哈希,其中key =屬性名稱,並且該密鑰的值是錯誤消息? – Ricky

+0

對於密鑰您是正確的,但值可能是字符串或數組。如果你的列驗證了多個事物,例如uniq和presence,那麼如果兩個驗證都失敗,那麼你會得到2個錯誤消息,所以它會像':email => ['必須是唯一的','不能是空白的]] ' – jeremywoertink