내 모델 디렉토리에 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 행이었습니다.
이름 범위가 레일즈 3에서 어떻게 작동하는지 명확히 이해하지 못하고 있습니다. 아마도 Model 객체에서 상수를 설정하기 위해 클래스 메소드를 호출해야 할 때도 이해가되지 않을 수 있습니다. 그것은 응용 프로그램 초기화 작업이어야한다고 생각하지만 어쩌면 그 요청은 다른 곳에서해야합니다.
Ib 케이스 누구나 궁금해하는 점은이 코드와 Ruby (비 레일) 환경에서 작동하는 적절한 웹 서비스를 호출했기 때문입니다. 다음은
는 사람이 초보자에게 약간 포인터를 적어주세요 수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 기반의 서비스를 호출하는 것이 어떤 문제를 일으킬 것이라는 것을 알고 있습니다. 내가 일하기위한 연결을 얻게되면 나는 그것을 준비한다! 사전
크리스
다시 말해 주셔서 감사합니다. 이제는 작동하지만 약간의 수정이 필요합니다. '../app/models/booking'경로에 앱이 제대로 포함되어 있어야합니다. 많이 감사했습니다 – seabird20
다행이었습니다. 패스의/app 부분을 추가하기 위해 내 대답이 업데이트되었습니다. –