問題タブ [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.

0 投票する
2 に答える
1045 参照

cakephp - Cakephp モデル内でコントローラーのアクションを呼び出す方法

メッセージモデルの afterSave 内で作業しています。メッセージが作成されるたびにメールを送信して、受信者に新しいメッセージを通知したいと考えています。メールを送信するメッセージ コントローラー内にアクションがあり、afterSave から呼び出したいと思います。

私はこのようにそれを呼び出してみました:

コントローラーではなくモデル内の関数を検索するため、SQL エラーが発生します。

モデル関数を宣言するにはどうすればよいですか? 出来ますか?

0 投票する
2 に答える
1065 参照

ruby-on-rails - 複雑なRubyonRailsでの関連付けの保存後

理論:-でレコードを作成した後、customer bill2つの異なるモデルの2つのデータセットを送信しています。1セットのデータがに送信されledger、1セットのデータがに送信されledger_line_itemます。複雑なのは、データを送信した後、ledger_idに保存したいということledger_line_itemです。コードは次のとおりです

コード:-

元帳で私は書いた

上記のコードはエラーなしで正常に動作しますが、ledger_idに投稿されていませんledger_line_items。このエラーが発生している理由を特定できませんか?請求書が作成された後に投稿ledger_idするという私の目標を達成することができる他の方法はありますか?ledger_line_itemsガイダンスが必要です。よろしくお願いします。

0 投票する
1 に答える
393 参照

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 コールバックを削除し、独自の評価を計算するメソッドをユーザー モデルに追加して、コントローラーで呼び出しました。

0 投票する
2 に答える
256 参照

ruby-on-rails-3 - 以前の HABTM 値を取得する

私のアプリでは、私はいくつかの を持っており、特定のに応じて (関連付けを介して)clientsいくつか持っているので、すべてをに手動で追加する代わりに、を選択するだけですべてが自動的に追加されます ( in is )。ハブTM 。elementshas_many_throughBusinessTypeClientelementsClientBusinessTypebusiness_typeClientattr_readonlyBusinessTypeelements

これがキャッチです。デフォルト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_updateclients'_wasbusiness_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.elementsor で古い値を取得するにはどうすればよいですbefore_updateafter_update?

よろしくお願いします。

0 投票する
1 に答える
2041 参照

ruby-on-rails-3 - Rails after_save エラー

これは after_save コールバックを使用する正しい方法ですか?

このコードは次のようにエラーをスローします

after_save を使用する正しい方法は何ですか?

0 投票する
0 に答える
369 参照

ruby-on-rails - Rails: レベルごとの最高スコアを追跡するための戦略

私は、ユーザーがプレイする各レベルの最高スコアを追跡する必要がある Rails アプリに取り組んでいます。

レベルの各試行には複数のラウンドがあり、試行の各ラウンドのスコアの合計が試行の total_score としてキャッシュされます。

モデル:

  • ハイスコ​​ア (belongs_to: ユーザー、レベル、試行)
  • レベル (has_many: 試行回数)
  • 試行 (has_many: ラウンド、begs_to: ユーザー、レベル)
  • ラウンド (belongs_to: 試行)
  • ユーザー (has_many: high_scores、試行回数)

ラウンドが保存されると、それが属する試行の total_score が更新されます。現在、次の素朴な実装を使用していますが、すぐにリファクタリングする予定です。リファクタリングする前に、この情報を最新の状態に保つためのより良い戦略があるかどうか知りたいです。

この情報を照会するだけでよいことはわかっていますが、すべてのハイスコアを表示したい場合は迅速な応答が必要であり、各試行がその時点でハイスコアであったかどうかを保存できるようにしたいと考えています。完了しました。

0 投票する
1 に答える
425 参照

javascript - 解析 afterSave 関数がスキップされる

だから私はバックエンドとしてparse.comを使用するメッセージングアプリを持っています。アプリからメッセージを送信すると、Parse.com の「NewMessages」というクラスに保存されます。次に、私のクラウド コードでは、このクラス専用の afterSave 関数を使用して、新しいオブジェクトが "NewMessages" に保存されると、ランダムなユーザーを選択してメッセージに添付し、"Inbox" という新しいクラスに保存します。次に、「NewMessages」から元のメッセージを削除します。

「NewMessages」クラスは常に空である必要があります。しかし、大量のメッセージを非常に迅速に送信すると、一部がスキップされます。これを修正するにはどうすればよいですか?

afterSave を使用するよりも、これを構造化するためのより良い方法はありますか?