2012-08-31 53 views
7

如何顯示Rails 3.1中未通過驗證錯誤的字段的表單字段突出顯示?我知道腳手架會自動生成css和控制器代碼來處理這個問題,但我想知道是否有一種方法可以手動生成。我已經通過以下方法實現了錯誤消息的字符串顯示:@ user.errors.full_messages.each ...等,但是我無法使字段以紅色突出顯示。有任何想法嗎?如何突出顯示Rails驗證錯誤的字段

謝謝。

回答

19

假設你有一個錯誤類領域在你的CSS文件:

<% if @user.errors[:name] %> 
    <%= f.label :name, :class => "error" %> 
<% else %> 
    <%= f.label :name %> 
<% end %> 

這是你想要的嗎?

額外here's a section about customizing default ActiveRecord validations CSS.

編輯:(約額外IFS)

# app/helpers/application_helper.rb 

def field_class(resource, field_name) 
    if resource.errors[field_name] 
    return "error".html_safe 
    else 
    return "".html_safe 
    end 
end 

然後:

# in your view 

<%= f.label :name, :class => field_class(@user, :name) %> 
<%= f.label :password, :class => field_class(@user, :password) %> 
[...] 

(我可能犯了一個錯誤的那裏 - 我寫了在電話上 - 但你得到了一般想法。你可以通過多種方式進行編碼=無窮大,所以按照你喜歡的方式進行編碼......)

+0

謝謝。這有效,但這意味着我將不得不爲每個表單域做一個if ... – kdhuang

+0

請參閱編輯。我敢打賭,如果你喜歡,你甚至可以直接編寫代碼。或者你甚至可以重寫'label'本身,而不必寫任何額外的字符。 –

+0

謝謝naliwajek! – kdhuang

0

我必須這樣做(resource.errors [field_name] .length> 0)才能使其工作:

DEF field_class(資源,FIELD_NAME) 如果resource.errors [FIELD_NAME]。長度> 0 返回 「custom_error1」 .html_safe 別的 返回 「」 .html_safe 端 端

+1

或者你可以使用'present?'方法:'if resource.errors [field_name] .present?' – rapcal

2

滑軌現在有一個很好的把戲它的袖子。當一個error發生軌道把div與錯誤字段周圍的類.field_with_errors。所以現在你可以瞄準那個班級並添加樣式。

把重點放在輸入,你可以做

.field_with_errors input{ 
    border: 1px solid red !important; 
} 

這個CSS會放一個漂亮的紅線input元左右,而important!將覆蓋現有的樣式。

+0

太棒了!這很簡單!非常感謝 –

相關問題