У меня есть файл 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. Такое ощущение, что это должна быть задача инициализации приложения, но, возможно, этот запрос должен быть где-то еще.
В случае, если кому-то интересно, у меня был этот код и вызов соответствующих веб-сервисов, работающих в строгой среде Ruby (non 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 вместо завершения с базой данных возникнут некоторые проблемы. К тому, что я готов к тому, как я получаю подключение к работе!
Заранее спасибо
Chris