2009-03-03 43 views
9

我們不斷看到警告信息,如下面,當我們運行我們的規格:Ruby對象#ID警告和活動記錄

對象#ID將被棄用;使用對象#的object_id

有問題的代碼訪問一個ActiveRecord模型的ID(它是在表中的屬性,很明顯的,而不是在Ruby VM對象實例ID)。

有誰知道如何關閉這些特定的警告或以某種方式避免它們?

+0

如果這是一個測試,你確定你所訪問一個真正活躍記錄實體,而不是一個普通的ruby對象? – 2009-03-03 23:46:56

+0

啊......這些很可能是嘲弄的對象 – 2009-03-03 23:51:58

+0

你應該回答這個問題,因爲這完全解決了它。 – 2009-03-04 00:02:59

回答

6

我假設你正在做的嘲諷/磕碰(因爲你提到的規格)。

在我的情況下,當我存根ActiveRecord對象並訪問其ID屬性時,遇到了這些警告。

在您希望訪問的ActiveRecord對象的ID的情況下,我建議你做到以下幾點:

mock("MyActiveRecordObject", :id => 1001) 
10

當一個對象是0123'的後裔時,的呼叫轉到AR :: B的id方法,而不是Object上的已棄用的方法。

該警告通常意味着我的一個對象不是我認爲的那樣。

2

對象#id警告只發生在像NilClass這樣的普通ruby類上。 ActiveRecord :: Base覆蓋對象#id

4

您的對象實際上不是AR對象,通常表示某些數據檢索失敗(Table.find_by_name('nonexistent name')將返回nil)。如果您只想關閉可見的警告,則可以在配置中關閉whiny_nils,否則請在嘗試訪問對象的屬性並正常處理故障案例之前執行is_a?測試。

15

嘗試使用[:id]代替.id