2009-03-03 7 views
9

Rubyオブジェクト#IDは警告とアクティブレコード

オブジェクト#IDは廃止されますが、オブジェクトを使用する#オブジェクトID

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

これらの特定の警告をオフにする方法や、何らかの方法でそれらを回避する方法を知っている人はいますか?オブジェクトがActiveRecord::Baseから下降するとき

+0

これはテストである場合、あなたは本物アクティブにアクセスしていることを確認していますレコードのエンティティではなく、通常のルビオブジェクトではないでしょうか? –

+0

ああ...これらはよく模擬されたオブジェクトかもしれません –

+0

それは完全にそれを修正したので、あなたは質問に答えるべきです。 –

答えて

6

を使用してみてください。

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

あなたのActiveRecordオブジェクトのIDにアクセスするために期待する場合には

、私はあなたが次の操作を行うお勧めします:

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

idへの呼び出しは:: Bのid方法ではなく、Objectに廃止予定のものをARに進みます。

この警告は通常、自分のオブジェクトの1つが私の考えではないことを意味します。

+0

私は2つの正解を受け入れることができたらいいと思っています... –

2

オブジェクト#id警告は、NilClassのような通常のルビークラスでのみ発生します。 ActiveRecord :: Baseはオブジェクト#idをオーバーライドします

4

オブジェクトは実際にはARオブジェクトではなく、通常はデータの取得に失敗したことを示します(Table.find_by_name('nonexistent name')nilを返します)。表示されている警告を止めるだけの場合は、設定でwhiny_nilsをオフにしてください。それ以外の場合は、is_a?のテストを行ってから、オブジェクトの属性にアクセスし、問題を正常に処理してください。

15

は、私はあなたが(あなたが仕様を述べたので)モック/スタブをやっていると仮定してい[:id]代わりの.id

+0

なぜこの回答が下落しましたか?あたりです。 – ttvd

+0

悪意を持っていて、私のすべてを下降させているユーザーがいたからです。 –

+0

私はこれをupvotingです.. – bragboy

関連する問題