10

私は誰かのコードベースを維持していますが、彼らは次のようなものを持っています:

if @widget_part.destroy
  flash[:message] = "Error deleting widget part"
else
  flash[:message] = "Widget part destroyed successfully"
end

何をdestroy返しますか?このようなテストをしても大丈夫ですか?私が尋ねている理由は、私が使用しようとしたことです

flash[:message] = "Error deleting widget part : #{@widget_part.errors.inspect}"

エラーメッセージがないので、混乱しています。それは次のようなものを与えます

#<ActiveModel::Errors:0x00000103e118e8 @base=#<WidgetPart widget_id: 7, ..., 
  id: 67>, @messages={}>
4

4 に答える 4

6

よくわからない場合は、destroyed?メソッドを使用できます。destroy の戻り値は文書化されていませんが、凍結された破棄されたオブジェクトのみを返します (更新することはできません)。破棄アクションのステータスは返しません。

通常、オブジェクトの破棄は常に成功するはずですが、ActiveRecordErrorをリッスンできます。たとえば、オプティミスティック ロックでは、レコードの破棄時に ActiveRecord::StaleObjectError が発生する可能性があります。

于 2012-09-28T20:14:35.640 に答える
1

Ruby on Rails API documentationによると、destroyメソッドは破棄したオブジェクトを返しますが、凍結状態です。

オブジェクトが凍結されると、永続化できなくなるため、オブジェクトに変更を加えてはなりません。

を使用して、オブジェクトが破棄されたかどうかを確認できますobject.destroyed?

于 2012-09-28T20:15:43.307 に答える