2012-05-24 43 views
0

基本問題 - 如何訪問模塊內部的函數,然後訪問另一個模塊,然後訪問類。Ruby - 訪問模塊和類中的函數

在寶石 -

module Handsoap 
    module Http 

    # Represents a HTTP Request. 
    class Request 
     attr_reader :url, :http_method, :headers, :body, :username, :password, :trust_ca_file, :client_cert_file, :client_cert_key_file 
     attr_writer :body, :http_method 

     def set_trust_ca_file(ca_file) 
     @trust_ca_file = ca_file 

     end 
    end 
    end 
end 

在我的文件,我想這一點 -

Handsoap:Http::Request.set_trust_ca_file('/etc/ssl/certs/ca-certificates.crt') 

:Http is not a class/module (TypeError) 

回答

1

你有一個錯字。應該

Handsoap::Http::Request 

而且,你的方法應該是類的實例方法

def self.set_trust_ca_file(ca_file) 
    # ... 
end 
+0

糟糕。固定的。現在一個新的錯誤'Handsoap :: Http :: Request:Class(NoMethodError)'undefined method'set_trust_ca_file' –

+0

更新了答案 –

1

我相信檢查答案不正確。 set_trust_ca_file()方法不是類方法。它是設置和實例變量,所以它是一個實例方法。

您需要在請求類的一個實例調用set_trust_ca_file():

var = Handsoap::Http::Request.new 
var.set_trust_ca_file(ca_file) 

您也可以完全消除的方法,因爲attr_accessor中陳述會使實例變量,從類的外部@trust_ca_file設定:

var = Handsoap::Http::Request.new 
var.trust_ca_file = "new_value" 
+0

它設置了類實例變量,所以它是一個類實例方法。不要將它們與實例變量/方法混淆。另外設置'trust_ca_file'可能會更方便一次,而不是爲每個新請求都設置它。 –