9

仕様を実行すると、次のような警告が表示され続けます。

Object#idは非推奨になります。Object#object_idを使用します

問題のコードは、ActiveRecordモデルのIDにアクセスしています(これは、Ruby VMのオブジェクトインスタンスIDではなく、明らかにテーブルの属性です)。

これらの特定の警告をオフにする方法、または何らかの方法でそれらを回避する方法を知っている人はいますか?

4

5 に答える 5

15

[:id]代わりに使用してみてください.id

于 2009-03-04T03:27:58.663 に答える
10

オブジェクトが の子孫である場合、ActiveRecord::Baseへの呼び出しは、 の非推奨のメソッドではなく、idAR::B のメソッドに移動します。idObject

この警告は通常、私のオブジェクトの 1 つが私が思っているものではないことを意味します。

于 2009-03-04T00:04:14.237 に答える
6

私はあなたがモッキング/スタブを行っていると仮定しています(仕様について言及したため)。

私の場合、ActiveRecord オブジェクトをスタブしてその ID 属性にアクセスすると、これらの警告が表示されます。

ActiveRecord オブジェクトの ID にアクセスすることが予想される場合は、次のことをお勧めします。

 mock("MyActiveRecordObject", :id => 1001)
于 2009-03-05T09:11:11.903 に答える
4

オブジェクトは実際には AR オブジェクトではありません。通常、一部のデータの取得に失敗したことを示しています (Table.find_by_name('nonexistent name')が返されnilます)。表示されている警告をオフにするだけの場合は、構成でオフwhiny_nilsにすることができます。それ以外の場合はis_a?、オブジェクトの属性にアクセスして失敗のケースを適切に処理する前にテストを行います。

于 2009-03-04T01:09:30.477 に答える
2

object#id 警告は、NilClass などの通常の Ruby クラスでのみ発生します。ActiveRecord::Base は object#id をオーバーライドします

于 2009-03-04T00:13:37.083 に答える