[解決済み] railsでdestroy時に'validate'を行うには?
2023-06-24 14:07:57
質問
restful リソースの破壊時に、破壊操作の継続を許可する前に、いくつかのことを保証したいのですが。基本的に、私は、そうすることがデータベースを無効な状態に置くことに注意した場合、destroy 操作を停止する機能が欲しいのです。destroy操作には検証コールバックがないので、destroy操作を受け入れるべきかどうか、どのように検証するのでしょうか?
どのように解決するのですか?
例外を発生させて、それをキャッチすることができます。Railsは削除をトランザクションで包むので、それが役に立ちます。
例えば
class Booking < ActiveRecord::Base
has_many :booking_payments
....
def destroy
raise "Cannot delete booking with payments" unless booking_payments.count == 0
# ... ok, go ahead and destroy
super
end
end
別の方法として、before_destroyコールバックを使用することもできます。このコールバックは通常、依存するレコードを破棄するために使用されますが、 代わりに例外をスローしたり、エラーを追加したりすることができます。
def before_destroy
return true if booking_payments.count == 0
errors.add :base, "Cannot delete booking with payments"
# or errors.add_to_base in Rails 2
false
# Rails 5
throw(:abort)
end
myBooking.destroy
は false を返すようになり
myBooking.errors
は返されたときに入力されます。
関連
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Ruby on RailsでJSON出力を "きれい "にフォーマットする方法
-
[解決済み] Railsのscaffoldingを元に戻す
-
[解決済み】Railsの認証トークンを理解する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rails: sudo "コマンドが認識されないのはなぜですか?
-
[解決済み】取得中。「プロジェクトのクローンとマイグレート後に、「マイグレーションは保留中です。この問題を解決するには 'bin/rake db:migrate RAILS_ENV=development' を実行してください。
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み] Railsです。NameError: 初期化されていない定数
-
[解決済み] Ruby on Railsのランナー
-
[解決済み] Ruby on Railsのためにnetbeansを構成する方法は?
-
[解決済み] Railsコントローラからホスト名を取得する
-
[解決済み] rails consoleを起動するとRailsのイニシャライザーが呼ばれる?
-
[解決済み] rails/rubyでgroup_byを使用する。
-
[解決済み] 未初期化の定数 "コントローラ名"