对象的未定义方法`stringify_keys'

时间:2014-10-21 13:47:45

标签: ruby-on-rails

我对Ruby和Rails的世界相当新(一周前开始,我的背景主要是PHP)。我在这里上了这个班,作为工厂。

我收到以下错误:

未定义的方法`stringify_keys'对于#

我理解构造函数(.new)需要一个Hash而不是一个对象(为什么?)但是,虽然我花了几个小时搜索www,但此时我还没有找到可行的解决方案

我只想将Soap对象注入我的构造函数中。该构造函数非常简单,它将object参数放在应该存储它的实例变量中。 我一直在寻找能够将该对象变成适当Hash的方法,但我看到的只是一堆旧帖子,而且这些帖子非常脏。我宁愿退出编程而不是使用它们^^。

我从没想过这样做会引起头疼......

感谢您的提示!



class WebServices::WebServiceFactory
  def initialize (type, url, login, password, protocol = "soap")
    @type, @protocol, @url, @login, @password = type, protocol, url, login, password
    case @protocol.capitalize
    when "Soap" then
      requestor = WebServices::Soap::Soap.new(url, login, password)
    end

    @class = @type.constantize.new(requestor)
  end
  
  def getservice
    return @class
  end
end




1 个答案:

答案 0 :(得分:0)

initialize方法可以接受你定义的任何参数,它不需要是哈希,事实上,它上面的代码看起来你有5个可以是任何类型的参数。

您是否希望将Soap对象作为initialize的参数传递?

如果你是这样的话(假设你使用你的Ruby版本是> = 2.0)

class WebServices::WebServiceFactory
  def initialize(requestor:, type:)
    @class = type.constantize.new(requestor)
  end
end

如果您希望此类处理创建Soap对象的详细信息,可能这样的内容对您有用:

module WebServices
  class WebServiceFactory
    SERVICES = {
      soap: 'WebServices::Soap::Soap'
    }

    def initialize(type:, protocol: :soap, params: {})
      return unless SERVICES.key?(protocol.to_sym)
      requestor = SERVICES[protocol.to_sym].constantize.new(params[:url], params[:login], params[:password])
      @class = type.constantize.new(requestor)
    end
  end
end