2011-09-01 23 views
6

Estoy actualizando de los rieles 3.0.7 a 3.1 y tengo problemas para pasar mis pruebas. El problema ocurre cuando trato de usar un objeto de recurso activo troceado en una fábrica.rails 3.1.0 belongs_to ActiveResource ya no funciona

#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 

En la consola y en el ajuste de especificaciones un empleado trabaja. Hacer referencia al objeto de empleado anulado en una nueva tarea genera el siguiente error.

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

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

EDITAR

Esta no es una cuestión chica de la fábrica. Me sale el mismo error si hago lo siguiente en la consola.

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

Debe estar relacionado con cómo belongs_to mapea la columna de id.

+0

Por favor, añada una respuesta y márquela como la respuesta correcta. Gracias por publicar esto. – WattsInABox

Respuesta

5

que no me gusta el parche mono así que creó un módulo que voy a incluir en la inicialización para extender 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 } 

Luego, en cada modelo ActiveRecord se vería así:

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

Esperanza esto ayuda a alguien

Cuestiones relacionadas