2011-07-31 96 views
6

我已經看到很多帖子提供-W0標誌作爲這個問題的答案,但我不想禁止所有的警告,只是警告特定的值。在Ruby中取消特定的警告

我在Ruby 1.8.7上運行一個非Rails應用程序(儘管它使用ActiveRecord)。我希望將所有的警告,除了以下棄用警告:

Object#id will be deprecated; use Object#object_id

如果這是不可能的,我想拋棄所有廢棄警告。 Java至少可以讓你做到這一點。 Ruby怎麼樣?

更新:我已經upvoted兩個答案,但檢查後來搜索者將期望在這裏找到一個答案。

+1

你爲什麼不停止使用'Object#id'? – jtbandes

+1

正在改變方法調用#object_id不可行嗎? –

+0

不工作。記住的對象是一個ActiveRecord實例,所以我實際上在尋找ActiveRecord屬性'id'。 – JellicleCat

回答

9

如果有產生的警告的特定的部分代碼,你可以嘗試從ActiveSupport內核模塊中混合,並用silence_warnings塊包起來(例如直接從RDoc的拉):

silence_warnings do 
    value = do_something_that_causes_warning # no warning voiced 
end 

noisy_call # warning voiced 

是絕對有必要壓制它?這不像你編譯的東西,不得不一次篩選大量的警告...

+1

我沒有編譯,的確,但我確實喜歡有一個乾淨的日誌,因爲我已經訴諸於我的日誌文件很多次。 – JellicleCat

+0

公平點。我仍然對爲什麼更改方法名稱很困難,特別是它返回與原始值相同的值。這是一種遺留應用程序嗎?您無法修改/測試的依賴關係? –

+0

使用'object_id'是一個禁忌,因爲我不是在尋找object_id,而是在尋找屬性'id'的值。記住的對象是ActiveRecord的一個實例。 – JellicleCat

3

編輯:如果您使用read_attribute(:id),那麼你應該避免華林。謝謝傑里米!

我不是一個Rails開發人員,但是沒有一種方法可以讓你說「我想要數據庫字段id,而不是對象的id方法」?

+0

'read_attribute(:id)' –