2011-12-16 14 views
7

में किसी फ़ील्ड के लिए डिस्प्ले नाम कैसे सेट करें ऑटो-जेनरेट किए गए एक का उपयोग करने के बजाय डेटाबेस फ़ील्ड के लिए डिस्प्ले नाम सेट करना संभव है?रेल

मुझे फ़ील्ड bbe_date मिला है, और स्क्रीन में, मैं प्रदर्शित स्ट्रिंग के रूप में 'बेस्ट से पहले' का उपयोग कर रहा हूं। मैं इसे मैन्युअल रूप से सेट करने के कुछ विचारों के माध्यम से रहा हूं, लेकिन क्या कोई बेहतर तरीका है?

यह उम्मीद है कि मानव-पठनीय रूप में ब्राउज़र नाम फ़ील्ड नाम भेजा जाएगा। मैं विशेष रूप से और साथ ही सत्यापन त्रुटियों के बारे में सोच रहा हूँ (के बाद से है कि सा मैं पहले से ही मैन्युअल रूप से संभाला नहीं किया है!) - मेरे सत्यापन कोड क्या कर रहा है:

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

लेकिन जब तक मैं विशेष रूप से इस अवरोधन, मैं सिर्फ 'BBE देखना प्रमाणीकरण त्रुटि के रूप में तारीख मान्य नहीं है।

+0

फ़ील्ड को 'best_before' नाम देने का पुन: उपयोग क्यों न करें? सिर्फ एक विचार। –

+0

यह एक संभावना है, लेकिन मैं डेटाबेस को बदले में नहीं बदलूंगा क्योंकि क्लाइंट फ़ील्ड के लिए एक अलग नाम देखना चाहता है। और यह एक सामान्य समाधान नहीं है, क्योंकि यहां तक ​​कि मूल बीबीई तिथि का नाम भी बेबे डेट को स्वत: उत्पन्न करता है - रेल को पता नहीं है कि बीबीई एक संक्षिप्त शब्द है। – asc99c

उत्तर

13

आपको internationalization (I18N) की आवश्यकता है। हाँ, भले ही आप सिर्फ अंग्रेजी चाहते हैं।

संशोधित config/स्थानों/en.yml, और सेट:

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

कूल, इसे जाने देगा! – asc99c

+0

जवाब स्वीकार करने में देरी के बारे में क्षमा करें! बस इसे वापस मिला, और यह बहुत अच्छा काम करता है – asc99c

0

एक तरीका यह है कि कौन सा आप सामान्य प्रदर्शन नाम देता है human_attribute_name के व्यवहार को ओवरराइड करने के लिए है।

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

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

ध्यान दें कि अगर इस रेल 2 है, तो आप human_attribute_name से विकल्पों का परम दूर करने के लिए की आवश्यकता होगी: अपने मॉडल में।