2011-09-01 14 views
6

मैं रेल 3.0.7 से 3.1 तक अपग्रेड कर रहा हूं और मुझे अपने परीक्षण पास करने में परेशानी हो रही है। समस्या तब होती है जब मैं कारखाने में एक स्टब्ड सक्रिय संसाधन ऑब्जेक्ट का उपयोग करने का प्रयास करता हूं।रेल 3.1.0 संबंधित_to ActiveResource अब काम नहीं कर रहा है

#employee.rb 
class Employee < ActiveResource::Base; end 

#task.rb 
class Task < ActiveRecord::Base 
    belongs_to :employee 
end 

#factories.rb 
Factory.define :employee do |e| 
    e.name "name" 
end 

Factory.define :task do |t| 
    t.employee { Factory.stub(:employee) } 
end 

कंसोल पर और एक कर्मचारी काम करने वाले spec में spec में। एक नए कार्य में stubbed कर्मचारी वस्तु का संदर्भ निम्नलिखित त्रुटि देता है।

Factory.create(:task, :employee => Factory.stub(:employee)) 

NoMethodError: 
    undefined method `[]' for #<Employee:0x007fc06b1c7798> 

संपादित

यह एक कारखाने महिला मुद्दा नहीं है। यदि मैं कंसोल में निम्न करता हूं तो मुझे वही त्रुटि मिलती है।

Task.new(:employee => Employee.first) 

यह आईडी कॉलम के नक्शे से संबंधित है।

#task.rb 
class Task < ActiveRecord::Base 
    ar_belongs_to :employee 
end 

आशा:

+0

मदद करता है कृपया एक उत्तर जोड़ें और इसे सही उत्तर के रूप में चिह्नित करें। इसे पोस्ट करने के लिए धन्यवाद। – WattsInABox

उत्तर

5

मैं बंदर पैच पसंद नहीं आया तो मैं एक मॉड्यूल है कि मैं प्रारंभ में शामिल होंगे प्रत्येक ActiveRecord मॉडल में ActiveRecord

module BelongsToActiveResource 

    def self.included(base) 
     base.extend(ClassMethods) 
    end 

    module ClassMethods 

    def ar_belongs_to(name, options = {}) 
     class_eval %(
     def #{name} 
      @#{name} ||= #{options[:class_name] || name.to_s.classify }.find(#{options[:foreign_key] || name.to_s + "_id" }) 
     end 

     def #{name}=(obj) 
      @#{name} ||= obj 
      self.#{ options[:foreign_key] || name.to_s + "_id" } = @#{name}.#{ options[:primary_key ] || 'id' } 
     end 
    ) 
    end 

    end 

end 

ActiveRecord::Base.class_eval { include BelongsToActiveResource } 

विस्तार करने के लिए तो कैसा लगेगा बनाया यह किसी को

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