2012-07-17 10 views
5

मैं ऑब्जेक्ट की तलाश करने के लिए findOrCreateBy का उपयोग करने की कोशिश कर रहा हूं या अगर मुझे कोई मिलान नहीं मिल रहा है, तो यह तत्काल काम कर रहा है, लेकिन यह मेरी अपेक्षा के अनुसार काम नहीं कर रहा है।क्या ऑरक्रेट अन्य डोमेन उदाहरणों के साथ काम करता है?

String myBaz = "some unique string" 
FooType myFooType = FooType.findByName("Large") 

// The Foo table is empty, so this should give me a new Foo 
Foo myFoo = Foo.findOrCreateByBazAndFooType(myBaz, myFooType) 

assert myFoo.baz == myBaz 
assert myFoo.fooType == myFooType // Fails because myFoo.fooType is null, 
// but should be set to myFooType 

क्या मैं गलत कर रहा हूँ:

यह है कि मैं क्या है? fooType क्यों ठीक से सेट नहीं किया जा रहा है? क्या यह अपेक्षित व्यवहार है या क्या यह Grails में एक बग है?

+0

मदद मिल सकती है ठीक है, यह मूर्खतापूर्ण हो सकता है लेकिन जब से अपने डेटाबेस खाली, FooType.findByName है ("बड़े") अशक्त वापस आ जाएगी, है ना? और बाद में आप इस शून्य विशेषता को पारित करने वाली वस्तु बनाते हैं। तो, हाँ, myFoo.fooType वास्तव में इस मामले में शून्य होना चाहिए। –

+0

@TiagoFarias, मैंने इस बिंदु पर अधिक सही होने के लिए प्रश्न को अद्यतन किया। FooTypes को डीबी में बूटस्ट्रैप किया गया है, इसलिए यह वास्तव में खाली नहीं है, लेकिन डीबी में कोई फू ऑब्जेक्ट्स नहीं हैं। जब 'findOrCreate *' कहा जाता है, 'myFooType'' FooType' का एक सतत उदाहरण है। – cdeszaq

उत्तर

1

मुझे यकीन नहीं है लेकिन ऐसा लगता है कि आप इसे एक परीक्षण के रूप में करने की कोशिश कर रहे हैं। (आपके assert के आधार पर)

Grails ढांचे द्वारा जोड़ा गया गतिशील तरीकों यूनिट परीक्षणों में उपलब्ध नहीं हैं जब तक आप डोमेन वर्ग का नकल नहीं करते। अब इस वर्ष grails एक और Question site से लिया कोड है, लेकिन इसे

import grails.test.GrailsUnitTestCase 

class MessageControllerTests extends GrailsUnitTestCase { 

    def savedMessages 

    void setUp() { 
     super.setUp() 
     savedMessages = [] 
     mockDomain(Message, savedMessages) //mocking the domain class 
     mockController(MessageController) //mocking the controller 
    } 

    void testMessageCanBeCreated() { 
     def messageController = new MessageController() 
     messageController.params.title = 'detail' 
     messageController.params.detail = 'some detail' 

     messageController.save() // executing the save action on the MessageController 

     assertEquals('list', messageController.redirectArgs.action) 
     assertEquals(1, savedMessages.size()) //assert the message has been saved 
    } 
} 
+0

समस्याएं दिखाने के लिए केवल आवेषण ही मौजूद हैं। यह वास्तव में एक सेवा से कोड है, इसलिए सभी GORM बिट्स और बॉब्स वहां हैं, लेकिन 'findOrCreateBy *' ठीक से काम नहीं करता है। हालांकि धन्यवाद। – cdeszaq

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