Ruby Object#idの警告とアクティブレコード
-
03-07-2019 - |
質問
仕様を実行すると、次のような警告が引き続き表示されます。
Object#idは非推奨です。 Object#object_idを使用
問題のコードは、ActiveRecordモデルのID(明らかに、Ruby VMのオブジェクトインスタンスIDではなく、テーブルの属性)にアクセスしています。
これらの特定の警告をオフにする方法、または何らかの方法でそれらを回避する方法を誰かが知っていますか?
解決
(仕様に言及したため)あなたがモック/スタブをしていると仮定しています。
私の場合、ActiveRecordオブジェクトをスタブしてそのID属性にアクセスすると、これらの警告が発生します。
ActiveRecordオブジェクトのIDにアクセスする予定がある場合は、次のことを行うことをお勧めします。
mock("MyActiveRecordObject", :id => 1001)
他のヒント
.id
[:id]
を使用してみてください オブジェクトが ActiveRecord :: Base
の子孫である場合、 id
の呼び出しは、AR :: Bの id
メソッドではなく、 Object
で非推奨になりました。
この警告は、通常、私のオブジェクトの1つが思ったものではないことを意味します。
あなたのオブジェクトは実際にはARオブジェクトではなく、通常、一部のデータ取得が失敗したことを示します( Table.find_by_name( 'nonexistent name')
は nil
を返します)。表示される警告をオフにするだけであれば、設定で whiny_nils
をオフにできます。そうでない場合は、オブジェクトの属性にアクセスする前に is_a?
テストを実行し、障害のケースを適切に処理します。
object#id警告は、NilClassなどの通常のルビークラスでのみ発生します。 ActiveRecord :: Baseはobject#idをオーバーライドします