2009-04-29 40 views
5

Tôi có một trường có tên là sui trong một trong các mô hình của tôi. Nó là viết tắt của "User User Identifier". Khi có lỗi xác nhận trên trường, Rails in "Sui là bắt buộc" hoặc "Sui đã được thực hiện".Làm cách nào để tôi cho Rails biết cách viết hoa chính xác từ viết tắt?

Tôi làm cách nào để thông báo cho Rails rằng 'sui'.titleize là "SUI"? Tôi đã xem Inflector.human, nhưng điều đó không hoàn toàn đúng.

Trả lời

7

Trong những trường hợp như vậy, tôi sử dụng plugin custom_err_msg. Vì nó đã được cài đặt, bạn có thể cung cấp cho các thông báo lỗi tùy chỉnh như thế này:

validates_presence_of :sui, :message => '^SUI is required' 

Khi bạn đặt^vào lúc bắt đầu sau đó Rails không đặt tên trường.

EDIT: Có một plugin khác i18n_label được sử dụng cho bản dịch, nhưng với nó bạn có thể theo cách rất đơn giản thay thế tên trường của bạn bằng một thứ gì đó đẹp hơn (trên trang plugin có ví dụ). Tên sẽ thay thế trong:

<%= f.label :sui %> 
YourModel.human_attribute_name "sui" 

và trong thông báo lỗi.

+0

Mẹo FANTASTIC! Có cách nào để đặt giá trị gây ra vấn đề trong tin nhắn không? "# {sui} được thực hiện" sẽ không hoạt động vì nó được đánh giá sai thời gian. –

+0

Tôi hy vọng một người nào đó có đề xuất hoạt động không chỉ là các thông báo lỗi, nhưng tôi thích plugin đó. –

2

Bạn có thể thực hiện việc này bằng cách định cấu hình ActiveSupport::Inflector, cung cấp phương thức titleize. Chỉ cần xác định inflections của riêng bạn trong bộ khởi tạo.

# config/initializers/inflections.rb 
ActiveSupport::Inflector.inflections do |inflect| 
    inflect.acronym 'SUI' 
end 

Khởi động lại ứng dụng của bạn để nhận thay đổi. Bây giờ titleize biết cách xử lý "SUI". Khởi động bảng điều khiển Rails để kiểm tra:

> "sui".titleize 
=> "SUI" 

Xem tài liệu được liên kết để biết những nội dung thú vị khác mà bạn có thể thực hiện với các thay đổi.

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