Области применения требуют загрузки классов и т. Д. - PullRequest
2 голосов
/ 24 февраля 2011

У меня есть файл 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

Ответы [ 2 ]

0 голосов
/ 02 марта 2011

Booking находится в пространстве имен корня, и вы вызываете функцию (в своей строке 49) в пространстве имен PNR2::Application. Вы должны изменить его на:

module PNR2
  class Application < Rails::Application  
    ...  
    ...  
    ::Booking.setup_connection  
  end  
end  
0 голосов
/ 24 февраля 2011

Я только что понял, что вы пытаетесь использовать класс Booking в своем файле application.rb. Я думаю, что у вас будут проблемы, потому что на данный момент ваше приложение не полностью сконфигурировано, но если вы можете обойти их, чтобы фактически использовать модель, вам потребуется файл в верхней части вашего файла application.rb :

require 'rails/all'
require File.join(File.dirname(__FILE__), '../app/models/booking')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...