2009-05-05 14 views
7

मैं एक ग्रेल्स नोब हूं और ऐसा कुछ चल रहा हूं जो एक बग प्रतीत होता है, लेकिन यह पूरी तरह से संभव है कि मैं सब ठीक से कॉन्फ़िगर नहीं कर रहा हूं।Grails गतिशील मचान के साथ हैनी: क्या यह एक बग है या मैं गलत कॉन्फ़िगर कर रहा हूँ?

class Player { 

     String firstName 
     String lastName 

     static constraints = { 
      firstName(blank:false) 
      lastName(blank:false) 
     } 
     String toString() { lastName + ", " + firstName } 
    } 

और

class Team { 

    String mascot; 
    static hasMany = [players:Player] 

    static constraints = { 
     mascot(blank:false) 
    } 
} 

मैं दोनों के लिए नियंत्रकों कि गतिशील पाड़ इन दो डोमेन कक्षा से परे कुछ भी नहीं है:

मैं दो सरल डोमेन वर्ग मिल गया है।

लेकिन जब भी मेरे डीबी में खिलाड़ियों की एक सूची है, मुझे नई टीम बनाने के दौरान उनके लिए बहु-चयन बॉक्स नहीं मिलता है।

हालांकि, बहु-चयन से पता चलता अप जब मैं एक टीम

संपादित करने के लिए जाना इस नए आइटम के लिए गतिशील मचान में एक बग है, मैं गलत है कि यह कैसे काम करने के लिए माना जाता है, या वहाँ कुछ और है मुझे यहां घोषित करने की ज़रूरत है?

किसी भी मदद की सराहना की है! मेरे पास स्क्रीनशॉट हैं जो स्टैक ओवरव्लो मुझे मेरी नईता के कारण जोड़ने नहीं देगा, लेकिन अगर इससे मदद मिलेगी तो मुझे उन्हें एक और तरीका दिखाने में खुशी होगी।

उत्तर

1

हां, डिफ़ॉल्ट मचान बच्चे वर्ग के 'निर्माण/संपादन पृष्ठ में एक अभिभावक चयनकर्ता रखता है।

मुझे लगता है कि यह उनके लिए बस इतना आसान था। हालांकि यह एक बहु-चयन नहीं होना चाहिए, केवल एक पुल-डाउन एकल-चयन, क्योंकि यह एक-से-कई है। अपने खिलाड़ी वर्ग के लिए

static hasMany = [teams:Team] 

:

आप आप एक बहुत-से-कई रिश्ते की अधिक चाहता था समझाया है के रूप में, आप जोड़कर भी देख सकते। मैंने पाया है कि Grails द्वि-दिशात्मक संबंधों के साथ बेहतर करता है। खोज क्वेरी बनाने के दौरान भी उपयोगी होता है, और आपको पहले से ही एक रिश्ते की मेज से अधिक की आवश्यकता नहीं होनी चाहिए।

यदि आप Grails pre-v1.1 का उपयोग कर रहे हैं, तो कई से अधिक रिश्तों को सीधे समर्थित नहीं किया जाता है, इसलिए स्थिर भी जोड़ना है ऊपर से अधिक पूरा समाधान नहीं होगा, क्योंकि आपको प्रबंधित करने की आवश्यकता होगी जब आप एक दिशा में जोड़ते हैं तो दूसरी सूची में जोड़ना। मैंने अभी तक v1.1 का उपयोग नहीं किया है, इसलिए मैं इसके बारे में बात नहीं कर सकता कि इसमें बहुत से लोगों को निर्दिष्ट करने के लिए क्या आवश्यक है।

+0

मैन्युअल रूप से संशोधित करना था आपके उत्तर विधेयक के लिए धन्यवाद। मुझे लगता है कि शायद मेरा उदाहरण बेहतर हो सकता है, यह है कि मैं एक खिलाड़ी को एक से अधिक टीम का सदस्य बनना चाहता हूं। यह वास्तव में कई से अधिक से अधिक है। यही कारण है कि मेरे पास प्लेयर पर कोई संबंध नहीं है, लेकिन अब मैं देखता हूं कि उपयोग के मामले में मैंने जो भ्रम पैदा किया है, वह भ्रम पैदा कर सकता है। यह बात मेरे लिए अजीब बात यह है कि बहु-चयन संपादन स्क्रीन पर अपेक्षित रूप से दिखाई देता है, लेकिन स्क्रीन पर नहीं। वह असंगतता मुझे लगता है कि यह गतिशील मचान में एक बग है, लेकिन मैं गलतियों को बनाने से काफी मुश्किल हूं (स्पष्ट रूप से) – Pete

+0

हम्म, v1.1 तक, Grails वास्तव में कई से कई का समर्थन नहीं करता है, आपको मैन्युअल रूप से रिश्ते बनाने की आवश्यकता होती है ऑब्जेक्ट करें और अपने आप को पारस्परिक रूप से प्रबंधित करें। मैंने अभी तक v1.1 का उपयोग नहीं किया है, इसलिए मैं इसके मचान डिफ़ॉल्ट पर टिप्पणी नहीं कर सकता, लेकिन तथ्य यह है कि यह संपादन पर दिखाता है, लेकिन नहीं बनाता, यह फिश लगता है। आप नाबल की Grails ईमेल सूची पर पोस्ट करने का प्रयास कर सकते हैं: http://www.nabble.com/grails--user-f11861.html – billjamesdev

+0

मैंने आपके कई से कई पहलुओं को ध्यान में रखने के लिए अपनी प्रतिक्रिया संपादित की है – billjamesdev

2

मुझे अंततः यह पता चला और मैं किसी और के मामले में जो कुछ भी करता हूं उस पर पारित करना चाहता था।

जब मैं टीम के लिए विचारों उत्पन्न, edit.gsp में प्रपत्र ब्लॉक इस तरह दिखता है:

<input type="hidden" name="id" value="${teamInstance?.id}" /> 
       <input type="hidden" name="version" value="${teamInstance?.version}" /> 
       <div class="dialog"> 
        <table> 
         <tbody> 

          <tr class="prop"> 
           <td valign="top" class="name"> 
            <label for="mascot">Mascot:</label> 
           </td> 
           <td valign="top" class="value ${hasErrors(bean:teamInstance,field:'mascot','errors')}"> 
            <input type="text" id="mascot" name="mascot" value="${fieldValue(bean:teamInstance,field:'mascot')}"/> 
           </td> 
          </tr> 

          <tr class="prop"> 
           <td valign="top" class="name"> 
            <label for="players">Players:</label> 
           </td> 
           <td valign="top" class="value ${hasErrors(bean:teamInstance,field:'players','errors')}"> 
            <g:select name="players" 
from="${Player.list()}" 
size="5" multiple="yes" optionKey="id" 
value="${teamInstance?.players}" /> 

           </td> 
          </tr> 

         </tbody> 
        </table> 
       </div> 
       <div class="buttons"> 
        <span class="button"><g:actionSubmit class="save" value="Update" /></span> 
        <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span> 
       </div> 
      </g:form> 

लेकिन create.gsp में प्रपत्र ब्लॉक इस तरह दिखता है:

<g:form action="save" method="post" > 
       <div class="dialog"> 
        <table> 
         <tbody> 

          <tr class="prop"> 
           <td valign="top" class="name"> 
            <label for="mascot">Mascot:</label> 
           </td> 
           <td valign="top" class="value ${hasErrors(bean:teamInstance,field:'mascot','errors')}"> 
            <input type="text" id="mascot" name="mascot" value="${fieldValue(bean:teamInstance,field:'mascot')}"/> 
           </td> 
          </tr> 

         </tbody> 
        </table> 
       </div> 
       <div class="buttons"> 
        <span class="button"><input class="save" type="submit" value="Create" /></span> 
       </div> 
     </g:form> 

में दूसरे शब्दों, इस कोने केस के लिए, डिफ़ॉल्ट बनाएं दृश्य विजेट को बहु-चयन सूची को सही तरीके से प्रदर्शित करने के लिए छोड़ देता है। जब मैंने लापता कोड की प्रतिलिपि और पेस्ट किया, तो गतिशील रूप से मचान नियंत्रक ने इसे उठाया और उम्मीद के अनुसार इसे जारी रखा। तो, यह निश्चित रूप से व्यू पीढ़ी कोड में एक बग है।

1

मुझे Grails के वर्तमान संस्करण (v1.3.4) का उपयोग कर एक ही समस्या का सामना करना पड़ा।Create.gsp

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