問題タブ [after-save]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cakephp - Cakephp モデル内でコントローラーのアクションを呼び出す方法
メッセージモデルの afterSave 内で作業しています。メッセージが作成されるたびにメールを送信して、受信者に新しいメッセージを通知したいと考えています。メールを送信するメッセージ コントローラー内にアクションがあり、afterSave から呼び出したいと思います。
私はこのようにそれを呼び出してみました:
コントローラーではなくモデル内の関数を検索するため、SQL エラーが発生します。
モデル関数を宣言するにはどうすればよいですか? 出来ますか?
ruby-on-rails - 複雑なRubyonRailsでの関連付けの保存後
理論:-でレコードを作成した後、customer bill
2つの異なるモデルの2つのデータセットを送信しています。1セットのデータがに送信されledger
、1セットのデータがに送信されledger_line_item
ます。複雑なのは、データを送信した後、ledger_id
に保存したいということledger_line_item
です。コードは次のとおりです
コード:-
元帳で私は書いた
上記のコードはエラーなしで正常に動作しますが、ledger_id
に投稿されていませんledger_line_items
。このエラーが発生している理由を特定できませんか?請求書が作成された後に投稿ledger_id
するという私の目標を達成することができる他の方法はありますか?ledger_line_items
ガイダンスが必要です。よろしくお願いします。
ruby-on-rails - belongs_to モデル after_save の更新
User モデルhas_many :comments
と Comment モデルがありbelongs_to :user
ます。
comment.ratings
収集して設定したいuser.rating
のでafter_save
、Comment モデルに呼び出すメソッドがあります。ただし、これは決して呼び出されません。
メソッドは次のとおりです。
Rubyコードを確認したところ、コンソールで動作するので、Rubyコードではないと思います。
はい、モデルにも after_save :update_user_rating があります。
私が間違っていることを理解しようとしていますか?
編集:デバッガーに基づいて、user.trip_rating= の最初の部分が実行されていないことがわかりました。つまり、その行でやろうとしたのですが、うまくいきnext
ませんでしたので、その行が問題であると想定しています。ただし、Rails コンソールを再度チェックインすると、そこで動作することがわかりました。理解できない!
解決済み:好きではありませんが、問題を解決した方法は次のとおりです。after_save コールバックを削除し、独自の評価を計算するメソッドをユーザー モデルに追加して、コントローラーで呼び出しました。
ruby-on-rails-3 - 以前の HABTM 値を取得する
私のアプリでは、私はいくつかの を持っており、特定のに応じて (関連付けを介して)clients
いくつか持っているので、すべてをに手動で追加する代わりに、を選択するだけですべてが自動的に追加されます ( in is )。ハブTM 。elements
has_many_through
BusinessType
Client
elements
Client
BusinessType
business_type
Client
attr_readonly
BusinessType
elements
これがキャッチです。デフォルトBusinessType
で作成した後、クライアントは要素を更新し、必要に応じて削除または追加できます(ほとんどは追加します)。したがって、私がやろうとしていることは次のとおりです。
onebusiness_type
に要素[1,2,3]
があり、 one に割り当てられているとclient
します。次に、次の要素が手動でclient
=に追加される[4,5,6]
ため、最終的には になり[1,2,3,4,5,6]
ます。ここではすべて問題ありません。
しかし、この後、business_type
が更新され、要素が2
削除されるため、最終的には になり[1,3]
ます。これが取引です。 を削除してクライアントを更新したいのですが、問題の に対応しない を削除しないでください2
。コールバックを使用して要素を更新していますが、メソッドが機能しませんHABTM 関係 (古い要素を取得するため。[4,5,6]
business_type
[1,3,4,5,6]
after_update
clients'
_was
business_type's
before_update
最初にコールバックを使用しclient.elements = client.elements - business_type.elements
て DB[1,2,3,4,5,6] - [1,2,3] = [4,5,6]
に一時的に保存し、 after_update でclient.elements = client.elements + business_type.elements
取得しようとしました[4,5,6] + [1,3] = [1,3,4,5,6]
が、これには既に の新しい値があり[1,3]
ます。business_type.elements
or で古い値を取得するにはどうすればよいですbefore_update
かafter_update
?
よろしくお願いします。
ruby-on-rails-3 - Rails after_save エラー
これは after_save コールバックを使用する正しい方法ですか?
このコードは次のようにエラーをスローします
after_save を使用する正しい方法は何ですか?
ruby-on-rails - Rails: レベルごとの最高スコアを追跡するための戦略
私は、ユーザーがプレイする各レベルの最高スコアを追跡する必要がある Rails アプリに取り組んでいます。
レベルの各試行には複数のラウンドがあり、試行の各ラウンドのスコアの合計が試行の total_score としてキャッシュされます。
モデル:
- ハイスコア (belongs_to: ユーザー、レベル、試行)
- レベル (has_many: 試行回数)
- 試行 (has_many: ラウンド、begs_to: ユーザー、レベル)
- ラウンド (belongs_to: 試行)
- ユーザー (has_many: high_scores、試行回数)
ラウンドが保存されると、それが属する試行の total_score が更新されます。現在、次の素朴な実装を使用していますが、すぐにリファクタリングする予定です。リファクタリングする前に、この情報を最新の状態に保つためのより良い戦略があるかどうか知りたいです。
この情報を照会するだけでよいことはわかっていますが、すべてのハイスコアを表示したい場合は迅速な応答が必要であり、各試行がその時点でハイスコアであったかどうかを保存できるようにしたいと考えています。完了しました。
javascript - 解析 afterSave 関数がスキップされる
だから私はバックエンドとしてparse.comを使用するメッセージングアプリを持っています。アプリからメッセージを送信すると、Parse.com の「NewMessages」というクラスに保存されます。次に、私のクラウド コードでは、このクラス専用の afterSave 関数を使用して、新しいオブジェクトが "NewMessages" に保存されると、ランダムなユーザーを選択してメッセージに添付し、"Inbox" という新しいクラスに保存します。次に、「NewMessages」から元のメッセージを削除します。
「NewMessages」クラスは常に空である必要があります。しかし、大量のメッセージを非常に迅速に送信すると、一部がスキップされます。これを修正するにはどうすればよいですか?
afterSave を使用するよりも、これを構造化するためのより良い方法はありますか?