2011-12-16 37 views
7

Có thể đặt tên hiển thị cho trường cơ sở dữ liệu, thay vì sử dụng tên hiển thị tự động không?Cách đặt tên hiển thị cho một trường trong Rails

Tôi có một trường bbe_date và trong màn hình, tôi đang sử dụng 'Best Before' làm chuỗi được hiển thị. Tôi đã được thông qua một vài quan điểm thiết lập này bằng tay, nhưng là có một cách tốt hơn?

Điều này hy vọng sẽ có hiệu lực ở bất cứ nơi nào tên trường được gửi đến trình duyệt ở dạng có thể đọc được. Tôi đặc biệt nghĩ về lỗi xác nhận là tốt (vì đó là các bit tôi chưa xử lý bằng tay!) - Mã xác nhận tôi đang làm:

record.errors.add :bbe_date, 'not valid' 

nhưng trừ khi tôi đặc biệt đánh chặn này, tôi chỉ thấy 'bbe ngày không hợp lệ 'làm lỗi xác thực.

+0

Tại sao không refactor trường được đặt tên là 'best_before'? Chỉ là một ý nghĩ. –

+0

Đó là một khả năng, nhưng tôi không muốn thay đổi cơ sở dữ liệu chỉ vì khách hàng muốn nhìn thấy một tên khác cho trường. Và đây không phải là một giải pháp chung, bởi vì ngay cả tên BBE ngày gốc tự động tạo ra ngày Bbe - Rails không biết BBE là một từ viết tắt. – asc99c

Trả lời

13

Bạn cần internationalization (I18N). Yup, ngay cả khi bạn chỉ muốn tiếng Anh.

Sửa config/miền địa phương/en.yml, và thiết lập:

en: 
    activerecord: 
    attributes: 
     your_lower_case_model_name: 
     bbe_date: Best Before 
+0

Tuyệt, sẽ cho nó đi! – asc99c

+0

Xin lỗi về câu trả lời chấp nhận chậm trễ! Chỉ cần trở lại với nó, và nó hoạt động tuyệt vời – asc99c

0

Một cách làm làm điều này là để ghi đè lên hành vi của human_attribute_name mang đến cho bạn tên hiển thị mặc định. Trong mô hình của bạn:

HUMANIZED_ATTRIBUTES = { 
    :bbe_date => "Best Before" 
} 

def self.human_attribute_name(attr, options={}) 
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super 
end 

Lưu ý rằng nếu đây là Rails 2, bạn sẽ cần xóa tham số tùy chọn khỏi human_attribute_name.

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