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