2013-07-19 13 views
8

私はuser has_many agentsagent belongs_to userというユーザーとの関連付けを持っています。 のレールコンソールでは、特定のシナリオをテストするために別のユーザーを使用しようとしています。エージェントを持たないユーザーが必要なので、user.agentsを削除します。 私はuser.agents.map(&:destroy)を試しましたが、ActiveRecord::StaleObjectError: Attempted to delete a stale object .iがuser.agents.delete_allを試したとしてもエラーが出ますが、それでもwork.canはありません。レールコンソールのコマンドでユーザエージェントを削除します。それはすべてのRailsの魔法(コールバックなど)を経由するのですべてのレールコンソールを削除してください

答えて

18

方が良い

user.destroy #For a single record 
user.agents.destroy_all #For a collection 
+0

私は 'user.agents'を破壊したいと私は' user.agents.destroyを試してみましたが、それは私にエラーを与えるために働きます。 –

+1

それは 'user.destroy'か' user.agents.destroy_all'です。単一のレコードの最初の1つの動作、コレクションの2番目の動作 – Benj

0
ActiveRecord::StaleObjectError 

destroyを使用再び削除しようとする前に、その上にあなたが持っているすべてのロックを外し、Optimistic lockingためです。他の誰かがシステムを使用しているかどうかを確認するか、開いているフォームを送信してください。

5

あなたは.destroy_allメソッドを探しています。指定されたコレクションのすべてのレコードを破棄します。 したがってuser.agents.destroy_allは、user.agentsの空の配列を返します。

.delete_allはクラスメソッドであり、特定の条件に一致するレコードを削除するため、使用できませんでした。このように、Agent.delete_all(condition)。条件なしで使用すると、一致するテーブルからすべてのレコードが削除されます。

.destroyメソッドはインスタンスメソッドです。彼らはオブジェクトをインスタンス化し、それを消去する前にコールバックを実行します。 .deleteメソッドはクラスメソッドであり、オブジェクトを直接消去します。

1

これは私

user.agents.find_each(&:destroy) 
関連する問題