2012-08-31 35 views
7

Làm cách nào để bạn hiển thị trường tô sáng cho trường không xác thực lỗi trong Rails 3.1? Tôi biết rằng giàn giáo tự động tạo ra mã css và điều khiển để xử lý điều này, nhưng tôi đã tự hỏi nếu có một cách để tạo ra bằng tay. Tôi đã triển khai chuỗi hiển thị thông báo lỗi thông qua: @ user.errors.full_messages.each ... v.v. nhưng tôi không thể để các trường được tô màu đỏ. Bất kỳ ý tưởng?Cách đánh dấu trường trên lỗi xác thực đường ray

Cảm ơn.

Trả lời

19

Giả sử bạn có một lỗi lớp cho các lĩnh vực trong file CSS của bạn:

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

Đây có phải là những gì bạn muốn?

tắm: here's a section about customizing default ActiveRecord validations CSS.

Edit:(khoảng IFS thêm)

# 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 

Và sau đó:

# in your view 

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

(Tôi có thể làm cho một sai lầm trong đó - Tôi là người viết ng trên điện thoại - nhưng bạn có ý tưởng chung. Bạn có thể viết mã này theo số cách = vô cùng, do đó, hãy thực hiện theo cách bạn muốn ...)

+0

Cảm ơn. Điều đó có hiệu quả, nhưng điều đó có nghĩa là tôi sẽ phải làm nếu cho mỗi trường biểu mẫu ... – kdhuang

+0

Xem chỉnh sửa. Tôi đặt cược bạn có thể mã nó ngay cả nội tuyến nếu bạn thích. Hoặc bạn thậm chí có thể ghi đè lên 'nhãn' và không cần phải viết thêm bất kỳ ký tự nào. –

+0

Cảm ơn naliwajek! – kdhuang

0

Tôi phải làm điều này (resource.errors [field_name] .length> 0) để làm cho nó hoạt động:

def field_class (tài nguyên, field_name) nếu resource.errors [field_name] .length> 0 trở lại "custom_error1" .html_safe khác trở lại "" .html_safe cuối cuối

+1

Hoặc bạn có thể sử dụng phương thức 'present?': 'if resource.errors [field_name] .present?' – rapcal

2

Rails bây giờ có một trick tốt đẹp lên tay áo của nó .. Khi một error xảy ra đường ray đặt một div với một lớp .field_with_errors xung quanh các trường lỗi. Vì vậy, bây giờ bạn có thể nhắm mục tiêu lớp đó và thêm kiểu dáng.

Để tập trung vào các đầu vào bạn có thể làm

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

css này sẽ đặt một đường đỏ đẹp xung quanh các yếu tố input khi important! sẽ ghi đè lên bất kỳ phong cách hiện.

+0

Tuyệt vời! Điều này thật đơn giản! Cảm ơn rất nhiều –

Các vấn đề liên quan