2011-09-01 19 views
6

Sto aggiornando dal binario 3.0.7 a 3.1 e sto avendo problemi a far passare i miei test. Il problema si verifica quando provo a utilizzare un oggetto risorsa attivo con stub in una fabbrica.rails 3.1.0 appartiene a ActiveResource non funziona più

#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 

Sulla console e nelle specifiche di stub funziona un dipendente. Il riferimento all'oggetto impiegato stub in una nuova attività dà il seguente errore.

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

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

EDIT

Questo non è un problema di Factory Girl. Ottengo lo stesso errore se faccio quanto segue nella console.

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

Deve essere correlato a come appartiene_per mappare la colonna id.

+0

Si prega di aggiungere una risposta e contrassegnarlo come la risposta corretta. Grazie per aver postato questo. – WattsInABox

risposta

5

Non mi è piaciuta la patch scimmia così ho creato un modulo che mi includere l'inizializzazione di estendere 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 } 

Poi in ogni modello ActiveRecord sarebbe simile:

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

Speranza questo aiuta qualcuno

Problemi correlati