[解決済み] Railsのafter_saveコールバックでどの属性が変更されたかを判定しますか?
2022-04-21 02:01:46
質問
モデルオブザーバーにafter_saveコールバックを設定し、モデルの 公開 属性が false から true に変更されました。のようなメソッドは 変更されたか? はモデルが保存される前にしか使えないので、現在私が試している(そして失敗している)方法は以下の通りです。
def before_save(blog)
@og_published = blog.published?
end
def after_save(blog)
if @og_published == false and blog.published? == true
Notification.send(...)
end
end
できればモデルオブザーバのコールバックを使って(コントローラのコードを汚染しないように)これを処理する最良の方法について、どなたかご提案がありますでしょうか?
解決方法は?
Rails 5.1+
使用方法
saved_change_to_published?
:
class SomeModel < ActiveRecord::Base
after_update :send_notification_after_change
def send_notification_after_change
Notification.send(…) if (saved_change_to_published? && self.published == true)
end
end
あるいは、お好みで。
saved_change_to_attribute?(:published)
.
Rails 3-5.1
警告
この方法は、Rails 5.1まで動作します (ただし、5.1では非推奨、5.2では破たんする変更があります)。この変更については、こちらの記事で紹介しています。 プルリクエスト .
あなたの中で
after_update
フィルター
缶
使い道
_changed?
アクセサーを使用します。だから例えば
class SomeModel < ActiveRecord::Base
after_update :send_notification_after_change
def send_notification_after_change
Notification.send(...) if (self.published_changed? && self.published == true)
end
end
ただ、うまくいくんです。
関連
-
[解決済み】Rails。Ruby on Railsの移行でデータベースカラムの名前を変更するにはどうすればよいですか?
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み】Webpacker::Manifest::MissingEntryError【クローズド
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] どのようにrailsでラジオボタンを正しく使用するには?
-
[解決済み] Paramが無いか、値が空である。ParameterMissing in ResultsController#update
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] バリデーションなしで属性を更新する方法
-
[解決済み] Railsはsaveでモデル内の検証をスキップしますか?
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】修正方法:エラー:'<ファイル名>'にチェックアウトされたコミットがない fatal: コマンドプロンプトで "git add ." を入力するとファイルの追加に失敗する
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] rspecにおけるassignsの意味
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] bundle install --without production は何をするのですか?
-
[解決済み] Railsでグループとカウント