質問

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

  

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をオーバーライドします

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top