2011-04-01 11 views
10

मेरे सभी चश्मा चलाने पर मुझे कोई समस्या है।रैक :: टेस्ट परिणामस्वरूप ActiveRecord :: AssociationTypeMismatch

 
    ActiveRecord::AssociationTypeMismatch: 
     Affiliate(#2154746360) expected, got Affiliate(#2199508660) 

ऐसा लगता है कि अपने मॉडल दो बार लोड किया जा रहा है।

मैंने "ऐप" विधि को परिभाषित करने के लिए रैक :: टेस्ट की आवश्यकता के साथ पेश करने की समस्या को अलग कर दिया है।

require 'rack/test' 
include Rack::Test::Methods 

# app method is needed for rack-test 
def app 
    Rails.application 
end 

अगर मैं बाहर टिप्पणी Rails.application मेरी रैक चश्मा काम नहीं करते, लेकिन मेरे अन्य चश्मा के सभी ठीक काम करते हैं। "ऐप" विधि में Rails.application का उपयोग उपरोक्त त्रुटि को प्रस्तुत करता है।

यदि मैं व्यक्तिगत रूप से अपनी चश्मा चलाता हूं, तो सबकुछ काम करता है। मैं स्पार्क के साथ अपने पर्यावरण को प्रीलोड कर रहा हूं और मुझे लगता है कि मॉडलों को पहले स्पार्क द्वारा लोड किया जाता है और फिर उन्हें फिर से परिभाषित किया जाता है जब Rails.application को मेरी "ऐप" विधि में बुलाया जाता है।

इस समस्या को हल करने के तरीके पर कोई विचार? मुझे यकीन नहीं है कि "ऐप" विधि में मेरे रेल ऐप को सेट करने का कोई और तरीका है या नहीं।

+0

हम ठीक उसी मुद्दे पर चल रहे हैं, और इसे सुलझाने में काफी असफल रहे हैं। क्या आपके पास कोई भाग्य है? –

+0

ऐसा लगता है कि इस समस्या पर factory_girl Google समूह पर कुछ कार्रवाई है: http://groups.google.com/group/factory_girl/browse_thread/thread/daa24556d90c31fc –

+0

माइकल, मेरे पास अब तक कोई भाग्य नहीं है। मैंने अपने शेष चश्मे के साथ अपमानजनक चश्मा चलाने से बचा है। यह एक दर्द है। –

उत्तर

0

अब मुझे यह समस्या नहीं है। मैंने अपने रत्न अपडेट किए। रेल 3.0.5 से 3.0.7 तक अपडेट किया गया था और मुझे लगता है कि यह संभवतः मेरी समस्या को हल करने वाले मणि अपडेट हो सकता है। रत्नों के नए संस्करणों के साथ किसी भी तरह से, मेरी समस्या ठीक हो गई है।

1
Rails.application के लिए स्रोत कोड से

:

# File railties/lib/rails.rb, line 34 
def application 
    @@application ||= nil 
end 

इसका मतलब है कि Rails.application रिटर्न एक ही वस्तु हर बार। शायद यह समस्या है - एक ही रेल ऐप पर कई परीक्षण चलाना ऑब्जेक्ट्स के साथ संघर्ष करता है। इस तरह

Some tutorials सेट परीक्षण:

def app 
    Rails::Application 
end 

others जबकि इस तरह यह कार्य करें:

def app 
    ActionController::Dispatcher.new 
end 

जो दोनों app की प्रत्येक कॉल के नई वस्तु बनाने।

संपादित करें: सिर्फ ActionController::Dispatcher.new को उन अंकों से देखा गया है जिन्हें बहिष्कृत किया गया है।

+0

धन्यवाद, लेकिन मेरे रत्नों को अपडेट करने के बाद चीजें अपने रास्ते को हल कर रही हैं। –