2012-02-10 6 views
6

मैं कुछ विरासत डेटाबेस तालिकाओं के चारों ओर एक त्वरित सीआरयूडी अनुप्रयोग फेंकने के लिए Grails मचान का उपयोग करने की कोशिश कर रहा हूं (इस प्रकार गाथा के लिए this previous StackOverflow question देखें)। अब मैं सबसे बुरी समस्याओं से पहले हूं, और एक कामकाजी सीआरयूडी ऐप है, लेकिन सामान्य उपयोगिता के साथ एक समस्या शेष है।विदेशी-प्रमुख संघों के लिए अनुकूल लेबल (आईडी कुंजी के बजाए) Grails मचान

मेरे कई डोमेन ऑब्जेक्ट्स में अन्य डोमेन ऑब्जेक्ट्स के साथ विदेशी-कुंजी संघ हैं। एक Contact, एक Owner के अंतर्गत आता है आदि

हालांकि, Contact के लिए CRUD पन्नों पर, मैं Owner के लिए वास्तविक id कुंजी देखने के लिए ... क्योंकि है कि मानव उपयोगकर्ताओं के लिए कुछ भी मतलब नहीं है नहीं करना चाहती। मैं इसके बजाय स्क्रीन पर प्रदर्शित अधिक मानव-अनुकूल Owner.name मान चाहता हूं।

"सूची" और "शो" दृश्य दृश्य के स्वचालित रूप से जेनरेट किए गए कोड में सभी विशेषताओं के साथ स्पष्ट रूप से सौदा करते हैं, और मेरे पास प्रस्तुत किए गए नियंत्रण को नियंत्रित करने के लिए उस कोड को ट्विक करने की क्षमता है। हालांकि, "निर्माण" और "संपादन" दृश्य सभी विशेषताओं को सूचीबद्ध नहीं करते हैं।

... 
<fieldset class="form"> 
    <g:render template="form"/> 
</fieldset> 
... 

इस कॉल जाहिरा तौर पर रनटाइम पर ऑटो का पता लगाता है क्या क्षेत्र हैं, और उन्हें कैसे प्रदर्शित करने के लिए के बारे में अपने आप ही निर्णय करता है: इसके बजाय उन दृश्य Grails किसी तरह का taglib इस तरह फोन बनाते हैं। एसोसिएशन वाले डोमेन ऑब्जेक्ट्स के लिए, यह अधिक मानव-अनुकूल विशेषता के बजाय संबंधित ऑब्जेक्ट की गिब्बिश आईडी प्रदर्शित करने का बुरा निर्णय लेता है।

क्या "संपादन" या "निर्माण" दृश्य पर फ़ील्ड प्रदर्शित होने के तरीके को बदलने के लिए कोई "आसान" (या कम से कम "सर्वोत्तम अभ्यास") तरीका है? निश्चित रूप से यह एक आम मुद्दा है जब भी मचान का उपयोग डोमेन ऑब्जेक्ट्स के साथ एसोसिएशन के साथ किया जाता है।

+0

यह एक साइड मामला है, लेकिन बाद में मुझे पता चला कि उपरोक्त यह कोड स्निपेट बस "_form.gsp" फ़ाइल से HTML में खींच रहा है, जो उसी डोमेन ऑब्जेक्ट के लिए स्वत: जेनरेट किए गए दृश्यों के रूप में उसी निर्देशिका में स्वतः उत्पन्न होता है । –

उत्तर

15

ओह, ओह ... तुम सिर्फ एक "toString()" संबद्ध डोमेन वस्तु पर विधि लागू कर सकते हैं, यह क्षेत्र आप प्रदर्शन प्रयोजनों के लिए उपयोग करना चाहते हैं वापसी होने:

class Owner { 

    String id // not human-friendly 
    String name // human-friendly 
    // ...etc... 

    String toString() { 
     return name 
    } 
} 

अब जब आप पर हैं Contact के लिए एक सीआरयूडी व्यू, जिसमें Owner एसोसिएशन के लिए एक फ़ील्ड है, स्क्रीन पर प्रदर्शित होने पर Owner.name विशेषता Owner.id या कुछ बदसूरत ऑब्जेक्ट संदर्भ के बजाय विशेषता है।

संबंधित मुद्दे