web-dev-qa-db-ja.com

レコードがrails

だから

record.new_record?

何か新しいことを確認するには

何かがうまくいっているかどうかを確認する必要があります。

record = some_magic
record.destroy
record.is_destroyed? # => true

そんな感じ。破壊するとオブジェクトがフリーズするので、フリーズしますか?仕事のようなものですが、このタスクのために明示的に何かがありますか?

76
Daniel Huckstep

あなたはこれを行うことができます。

Record.exists?(record)

ただし、それはデータベースにヒットするため、実際には必要ありません。私が知っている他の唯一の解決策は、前述のようにコールバックを行うことです。

attr_accessor :destroyed
after_destroy :mark_as_destroyed
def mark_as_destroyed
  self.destroyed = true
end

そして、record.destroyed

48
ryanb

早くやれよ:

record.destroyed?

詳細はこちら ActiveRecord :: Persistence

186
Voldy

これはすぐに来ています。最新の Riding Rails 投稿では、次のように書かれています:

そして最後に、それは必ずしもBugMash関連ではありませんが、JoséValim-他の多数のコミットの中で-model.destroyed?を追加しました。この気の利いたメソッドは、現在見ているインスタンスが正常に破棄された場合にのみtrueを返します。

それであなたは行き​​ます。近日公開!

10
Steve Klabnik

Record.destroyedしながら?正常に動作し、trueまたはfalseを返します。また、DRYこれを少し上げて、コントローラーでdestroyを呼び出す行にif条件を作成することもできます。

record = Object.find(params[:id])
if record.destroy
  ... happy path
else
  ... sad path
end

この投稿がゲームの少し遅れていることを理解してください。しかし、誰もがこれについてもっと議論したい場合、私はゲームです!補足:モデルのafter_destroy検証もありましたが、それが機能している間は、このような別のメソッドは過剰に思えます;)

6
DGG

destroyオブジェクトを呼び出すと、freezeの呼び出し以外は何も返されません(私の知る限り)。したがって、frozen?が最善の策です。他のオプションは、ActiveRecord::RecordNotFoundあなたがrecord.reload

上記のMikeの戦術が最善であると思うか、「仮定を立てる」ことを開始したい場合は、これらのケースのラッパーを書くことができます。

乾杯。

5
theIV

アプリのロジックを詳しく知らなくても、フリーズすると思いますか?あなたの最善の策です。

それに失敗すると、コールバックでトリガーするモデルに「破棄された」属性を確実に追加でき、より正確なソリューションが必要な場合はチェックできます。

0
Mike Buckbee