我对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

答案 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