2012-08-31 3 views
7

Rails 3.1에서 유효성 검사 오류가 실패한 필드에 대해 양식 필드 강조 표시를 어떻게 표시합니까? scaffolding이 이것을 처리 할 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] .length> 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; 
} 

important!는 기존의 스타일을 덮어 쓰기하는 동안이 CSS는 input 요소 주위에 좋은 레드 라인을 넣어 것입니다 할 수있는 입력에 초점을 맞 춥니 다.

+0

놀라워요! 이것은 매우 간단합니다! 고마워. –