だから
record.new_record?
何か新しいことを確認するには
何かがうまくいっているかどうかを確認する必要があります。
record = some_magic
record.destroy
record.is_destroyed? # => true
そんな感じ。破壊するとオブジェクトがフリーズするので、フリーズしますか?仕事のようなものですが、このタスクのために明示的に何かがありますか?
あなたはこれを行うことができます。
Record.exists?(record)
ただし、それはデータベースにヒットするため、実際には必要ありません。私が知っている他の唯一の解決策は、前述のようにコールバックを行うことです。
attr_accessor :destroyed
after_destroy :mark_as_destroyed
def mark_as_destroyed
self.destroyed = true
end
そして、record.destroyed
。
これはすぐに来ています。最新の Riding Rails 投稿では、次のように書かれています:
そして最後に、それは必ずしもBugMash関連ではありませんが、JoséValim-他の多数のコミットの中で-model.destroyed?を追加しました。この気の利いたメソッドは、現在見ているインスタンスが正常に破棄された場合にのみtrueを返します。
それであなたは行きます。近日公開!
Record.destroyedしながら?正常に動作し、trueまたはfalseを返します。また、DRYこれを少し上げて、コントローラーでdestroyを呼び出す行にif条件を作成することもできます。
record = Object.find(params[:id])
if record.destroy
... happy path
else
... sad path
end
この投稿がゲームの少し遅れていることを理解してください。しかし、誰もがこれについてもっと議論したい場合、私はゲームです!補足:モデルのafter_destroy検証もありましたが、それが機能している間は、このような別のメソッドは過剰に思えます;)
destroy
オブジェクトを呼び出すと、freeze
の呼び出し以外は何も返されません(私の知る限り)。したがって、frozen?
が最善の策です。他のオプションは、ActiveRecord::RecordNotFound
あなたがrecord.reload
。
上記のMikeの戦術が最善であると思うか、「仮定を立てる」ことを開始したい場合は、これらのケースのラッパーを書くことができます。
乾杯。
アプリのロジックを詳しく知らなくても、フリーズすると思いますか?あなたの最善の策です。
それに失敗すると、コールバックでトリガーするモデルに「破棄された」属性を確実に追加でき、より正確なソリューションが必要な場合はチェックできます。