2 Stimmen

Scoping erfordert das Laden von Klassen, etc.

Ich habe eine Datei booking.rb in meinem Modellverzeichnis. Sie enthält die Klassendefinition

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

Ich versuche, diese Methode von meinem application.rb siehe Code unten aufzurufen.

module PNR2
  class Application < Rails::Application  
    ...  
    ...  
    Booking.setup_connection  
  end  
end  

Wenn ich die Anwendung ausführe, schlägt dies wie folgt fehl...

  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)>

Der Grund für den Verweis auf Zeile 49 ist, dass ich alle Kommentare in dieser application.rb-Datei entfernt habe, um Platz in dieser Notiz zu sparen. Zeile 49 im Original war die Booking.setup_connection-Zeile.

Ich bin eindeutig nicht verstehen, wie Name Scoping in Rails 3 funktioniert. Vielleicht verstehe ich auch nicht, wann ich eine Klassenmethode aufrufen sollte, um eine Konstante in einem Model-Objekt einzurichten. Es fühlt sich so an, als ob das eine Aufgabe der Anwendungsinitialisierung sein sollte, aber vielleicht sollte diese Anforderung an einer anderen Stelle stehen.

Ib Fall jemand sich wundert, habe ich diesen Code und den Aufruf der entsprechenden Webdienste arbeiten in einem straingth Ruby (nicht Rails) Umgebung hatte.

Nachfolgend finden Sie den entsprechenden Code

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}

Kann jemand diesem Neuling bitte ein paar Tipps geben? Oh, und ja, mir ist klar, dass der Aufruf einiger SOAP-basierter Dienste anstelle von Backend mit einer Datenbank einige Probleme haben wird. Das bin ich bereit für, sobald ich die Verbindung zu arbeiten!

Vielen Dank im Voraus

Chris

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X