我的模型目录中有一个文件booking.rb。它包含类定义
class Booking < ActiveRecord::Base
def self.setup_connection
wsdlurl = 'http://10.14.47.201:7001xxx/webservice/RetrieveBookingsByCCLV1_01.wsdl'
factory = SOAP::WSDLDriverFactory.new(wsdlurl)
@@driver = factory.create_rpc_driver
@@driver.return_response_as_xml = true
end
end
我尝试从我的application.rb中调用此方法,请参阅下面的代码。
module PNR2
class Application < Rails::Application
...
...
Booking.setup_connection
end
end
当我运行应用程序时,以下内容失败...
C:/Users/sg0209028/RubymineProjects/PNR2/config/application.rb:49:in `<class:Application>': uninitialized constant PNR2::Application::Booking (NameError)
from C:/Users/sg0209028/RubymineProjects/PNR2/config/application.rb:18:in `<module:PNR2>'
from C:/Users/sg0209028/RubymineProjects/PNR2/config/application.rb:17:in `<top (required)>
引用第49行的原因是我删除了此application.rb文件中的所有注释,以避免在此注释中占用空间。原文中的第49行是Booking.setup_connection行。
我显然不理解名称作用域如何在Rails 3中起作用。也许我也不明白何时应该调用类方法在Model对象中设置常量。感觉应该是应用程序初始化任务,但也许该请求应该在其他地方。
Ib的情况下,任何人都在想,我已经有了这个代码并调用了适当的Web服务,这些服务工作在一个充满活力的Ruby(非rails)环境中。
以下是
的代码require 'soap/wsdlDriver'
require 'rexml/document'
require 'soap/rpc/driver'
WSDL_URL = "http://10.14.47.202:7001/xxx/webservice/RetrieveBookingsByCCLV1_01.wsdl"
factory = SOAP::WSDLDriverFactory.new(WSDL_URL)
driver = factory.create_rpc_driver
driver.return_response_as_xml = true
params = {"ccl" => "Booking[BookingName[BookingNameItem[TicketNumber > \"123456789\"]]]", "xmlFormat" => "DefaultBooking"}
response = driver.RetrieveBookingsByCCL(params)
doc = REXML::Document.new response
puts "Number of PNRs = " + REXML::XPath.first(doc, "//count").text
doc.elements.each ("//originCity") {|element| puts "Element = " + element.text}
任何人都可以给这个新手一些指示吗?哦,是的,我确实意识到调用一些基于SOAP的服务而不是以数据库结尾会有一些问题。一旦我开始工作,我就准备好了!
提前致谢
克里斯
答案 0 :(得分:0)
我刚刚意识到您正在尝试在application.rb文件中使用Booking类。我认为你会遇到问题,因为此时你的应用程序还没有完全配置,但如果你可以解决这些问题,实际使用模型,你必须要求你的application.rb文件顶部的文件:
require 'rails/all'
require File.join(File.dirname(__FILE__), '../app/models/booking')
答案 1 :(得分:0)
Booking
位于根命名空间中,您在PNR2::Application
命名空间内调用该函数(在第49行)。你应该把它改成:
module PNR2
class Application < Rails::Application
...
...
::Booking.setup_connection
end
end