2014-04-29 20 views
0

我使用的是谷歌驅動器API,我從谷歌驅動器API獲取文件對象。 現在 該文件可能/可能沒有downloadLink和webContentLink,具體取決於用戶驗證文件。 現在 我有這些方法,其中如何檢查方法是否存在並在Ruby中返回一些值?

download_links[index][1] = i.webContentLink if i.responds_to? :webContentLink 

現在 它說responds_to不是爲我所定義。 現在 我是一個遠程對象,所以我不能改變它的實現並添加method_missing或responds_to方法。 so 如何檢查i.webContentLink是否爲有效的方法,或不在該第i個對象中。

回答

4

有兩件事,這裏。

首先,#responds_to?確實不存在,在任何地方:)您要使用的正確方法名稱是#respond_to?。其次,這不是一個紅寶石方法,因爲你問它,但我提到它,因爲你發佈你的問題與紅寶石軌道標籤。來自Rails的ActiveSupport實現了一個#try方法來做到這一點。

如果它存在,或者爲零,它將返回該方法的結果是:

download_links[index][1] = i.try(:webContentLink) 

一定不要濫用的是,因爲它很快會導致很難理解的代碼(在某些時候,你會想了解NullObjects)。

相關問題