2011-02-23 42 views
2

我的模型目錄中有一個文件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(非rails)環境的相應Web服務。

下面是該

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

我才意識到你在試圖使用的艙位在application.rb中的文件。我認爲你會遇到問題,因爲在這一點上你的應用程序沒有完全配置,但是如果你可以解決這些問題,爲了實際使用模型,你必須要求文件位於application.rb文件的頂部:

require 'rails/all' 
require File.join(File.dirname(__FILE__), '../app/models/booking') 
+0

泛,再次感謝。它現在正在工作,但有輕微的mod - 需要確保應用程序正確包含在路徑中 - '../app/models/booking'。非常感謝 – seabird20 2011-02-25 17:55:21

+0

很高興它的工作。更新我的答案以添加路徑的/ app部分。 – 2011-02-25 18:21:14

0

Booking是根命名空間,而你調用該函數(在您的線路49)的PNR2::Application命名空間內。您應該將其更改爲:

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