Ruby on rails 3.1 rails 3.1.0属于不再工作的ActiveResource

Ruby on rails 3.1 rails 3.1.0属于不再工作的ActiveResource,ruby-on-rails-3.1,activeresource,Ruby On Rails 3.1,Activeresource,我正在从rails 3.0.7升级到3.1,在通过测试时遇到了困难。当我尝试在工厂中使用存根活动资源对象时,就会出现问题 #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

我正在从rails 3.0.7升级到3.1,在通过测试时遇到了困难。当我尝试在工厂中使用存根活动资源对象时,就会出现问题

#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

它必须与如何映射id列有关。

我不喜欢monkey补丁,所以我创建了一个模块,我将在初始化时包含该模块以扩展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 }
然后,在每个ActiveRecord模型中:

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

希望这对某人有所帮助

请添加答案并将其标记为正确答案。谢谢你发布这个。
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 }
 #task.rb
 class Task < ActiveRecord::Base
   ar_belongs_to :employee
 end