使用savon gem for SOAP

时间:2014-08-27 01:13:14

标签: ruby-on-rails ruby soap savon

当我将它添加到我的Gemfile时:

gem 'savon', '~> 2.0'

并运行bundle install。并尝试启动rails console我收到此错误:

app/models/user.rb:6:in `include': wrong argument type Class (expected Module) (TypeError)
    from app/models/user.rb:6:in `<class:User>'
    from app/models/user.rb:3:in `<top (required)>'

删除gem会消除问题,我真的不知道如何从这里解决问题。有什么建议吗?

更新(ruby版本输出):

ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-darwin13.2.0]

更新II (相关型号位):

class User < ActiveRecord::Base
  include InstanceMethodsOnActivation
  include GoingPostal
  include UUID
  include Wizard
  include PublicActivity::Common

第3行是类定义,第6行是UUID。这是uuid:

module UUID
  extend ActiveSupport::Concern

  def uuid
    HASHIDS.encrypt(id)
  end

  def to_param
    uuid
  end

  module ClassMethods
    def find_by_uuid(uuid)
      self.find_by_id(HASHIDS.decrypt(uuid)) unless uuid.nil?
    end

    def find_by_uuid!(uuid)
      self.find_by_id!(HASHIDS.decrypt(uuid)) unless uuid.nil?
    end
  end
end

1 个答案:

答案 0 :(得分:1)

savon gem的一个依赖是uuid gem,它提供UUID类。

在开发模式中,应用程序代码仅按需加载,这意味着永远不会加载您的uuid文件,而UUID是gem中的类。

在制作中,根据文件的位置以及您的急切负载设置,rails可能会尝试在应用启动时加载您的文件,但是您会因为创建一个同名的类而收到错误作为一个模块

最简单的方法是重命名模块 - 要么完全选择不同的名称,要么命名它。