問題タブ [counter-cache]

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 投票する
1 に答える
2538 参照

ruby-on-rails - カウンターキャッシュは更新されませんが、親と子に保存できます

カウンター キャッシュを追加しましたが、更新できません。しかし、新しいブログ投稿を追加することで親 (ブログ投稿モデル) を更新でき、新しいコメントを追加することで子 (コメント モデル) を更新できます。カウンタ キャッシュは、blog_posts.comments_count フィールドを自動更新することで、ブログ投稿ごとのコメントの総数を追跡することになっています。私が行ったいくつかの手順の概要を説明します。うまくいけば、誰かが私が間違っていたことに気付くでしょう。スキーマ ダンプは最後にあります。

私はブログ投稿モデルを持っています:

および投稿モデルに設定された counter_cache を持つ Comments モデル:

counter_cache 列を blog_posts テーブルに追加する移行を作成しました。

しかし、移行は current_count でブログ投稿を更新できません。常にゼロです。

Rails コンソールを開いて update_attribute を手動で試してみました。

しかし、データベースを見ると、comments_count = 0.

どんなアイデアでも喜んでいただければ幸いです。

私の schema.db は次のようになります。

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

ruby-on-rails - aasmを使用した複数のカウンターキャッシュ列

各状態の数をキャッシュする方法を探しています。以前にカウンターキャッシュを実行しましたが、状態ごとに複数のcounter_cache列を作成して更新し続ける方法はありますか、またはこれらの値をキャッシュするために他の場所を探す必要があります。

データベース内の3列だけのようです。何か案は?

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

linq-to-sql - 同時実行性とトランザクションをサポートする Linq-to-Sql カウンター キャッシュを実装する方法は?

質問オブジェクトが必要なシナリオがあり、ユーザーは同時に回答オブジェクトを質問オブジェクトに追加できます。質問オブジェクトは、回答数を維持する必要があります。

ユーザーが質問に送信した回答オブジェクトをトランザクション的に保存し、質問オブジェクトの増加した回答数を更新し、質問オブジェクトの回答数を更新しようとしたときに同時実行違反を処理する実装を Linq2Sql で行うにはどうすればよいですか?

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

ruby-on-rails - Rails モデルの counter_cache 列の初期化

テストには rspec を使用し、テストで使用されるオブジェクト グラフには hornsby シナリオを使用しています。

カウンタ キャッシュ列を初期化しない (nil) ままにするのではなく、値を 0 に初期化することをお勧めしますか? または、これらのカウンター キャッシュ列を作成する移行で既定値を定義する必要がありますか?

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

ruby-on-rails - counter_cache は after_create フックで古くなっています

モデルの after_create フックのカウンター キャッシュ値に依存しています。ただし、カウンター キャッシュが更新される前にフックが呼び出されるため、計算が中断されます。

after_create で常に最新の値が表示されるように、カウンター キャッシュを強制的に「フラッシュ」する方法はありますか?

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

ruby-on-rails - ruby カウンターキャッシュへのアクセス

学習演習として、acts_as_taggable_on_steroids のフォークをいじっています。私が見ているバージョンでは、タグ数を計算するために理解できないことがいくつかあります。そこで、PORC (Plain Old Rails Counters) を使用したバージョンを作成しようと考えました。

tag.taggings.count にアクセスすると、tagging_counter_cache が透過的にアクセスされると思いましたが、どうやらそうではありませんか? tag.tagging_counter_cache に明示的にアクセスする必要はありますか?

サイズも同じ。

それが事実ならクールですが、確認したかっただけです。

0 投票する
3 に答える
7872 参照

ruby-on-rails - Railsでカウンターキャッシュを実装するには?

投稿コントローラーとコメントコントローラーがあります。投稿には多くのコメントがあり、コメントは投稿に属します。アソシエイトは、次のようにオンになっている counter_cache オプションでセットアップされます。

次のように、テーブルにデフォルトでゼロに設定されているcomments_count列があります。posts

コメント コントローラーのcreateアクションには、次のコードがあります。

私の問題:@comment.saveが呼び出されると、次のエラーが発生します。

comment.rb:counter_cache => trueから削除すると問題は完全に解決するため、この漠然としたエラーの原因であると推測しています。ここで何が欠けていますか?コメントを保存し、投稿の counter_cache を Rails に処理させるにはどうすればよいですか?

ありがとう!


更新 - アプリケーション トレースが添付されています:

Rails フレームワークと直接関係のない唯一の行は次のとおりです。

6 行目は次のとおりです。


編集 2:@posts /、@postStackOverflow の単純化された例を書くときの私の側のタイプミスです。実際のアプリケーションには間違いはありません。

調べ@commentてみると、それは完全に有効であるように思われます - それは私が期待するものを正確に返します - 私が渡したどんな情報でもコメントの新しいインスタンスを返しますbuildsaveメソッドが呼び出されたときにのみ爆発します。

これまでのすべての提案に感謝します。他のアイデアはありますか?

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

ruby-on-rails - ActiveReord の has_many アソシエーションで counter_cache がデクリメントしない

私の Rails 3 アプリには 2 つのモデルがあり、3 番目のモデルはモデルとモデルの間の結合テーブルであり、has_many 関係があります。基本的に、User と Show は SavedShow によって結合され、ユーザーがショーのリストを保存できるようにします。

counter_cache フィールド (shows_saved_count) は自動的にインクリメントされますが、デクリメントされないことに気付きました。この問題の核心は、ユーザーのリストからのショーの削除が delete によって行われ、counter_cache の更新がトリガーされないことにあるようです。

ただし、ここで destroy メソッドを呼び出すことはできません。これは、SavedShow の User/Show 関連付けを削除しただけでなく、Show オブジェクト自体も削除したためです。これは私が望んでいるものではありません。

この種のシナリオでの counter_cache は適切な用途ではありませんか?

これは 2009 年にバグとして議論されたようで、修正が議論されましたが、最新の Rails 3.0 でもまだ問題が発生しています。

モデルに独自のカスタム処理を記述するだけですが、フックできる after_delete コールバックがないようです (おそらく、これがデクリメントが最初に機能しない理由です)。現時点では、関連付けの削除が発生する可能性があるコード内の場所は 1 つだけなので、カウンターを更新するために手動で呼び出しを行いますが、これは counter_cache を使用した ActiceRecord 関連付けの根本的な欠点またはバグのようです。 、何かが足りないのではないかと思っています。

これが実際に counter_caches の真の問題である場合、最善の回避策は何でしょうか?

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

ruby-on-rails - 単一テーブル継承の counter_cache

counter_cache が単一テーブルの継承で機能するかどうか疑問に思っています。

これらのモデルの場合:

それで、次のカウンターは機能しますか?

  1. それらのすべてが機能します
  2. それらのどれも機能しません
  3. questions_count仕事だけ
  4. のみsimple_questions_countcomplex_questions_count

どれ?3枚目ですが、あと4枚欲しいです。4 でない場合、4 を機能させるにはどうすればよいですか?

===更新===

次に例を示します。

だから今私は欲しい:

私の質問は、の基本的な動作は何:counter_cache => trueですか?単一テーブルの継承に適用することは可能ですか?

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

ruby-on-rails - counter_cacheの実装に問題があります

レーキが中止されました!...posts_countは読み取り専用のエラーとしてマークされています。

ユーザーと投稿の2つのモデルがあります。

私はposts_count列をusersテーブルに追加し、ユーザーごとの現在の投稿数を計算して記録する移行があります。

移行を実行すると、エラーが発生します。もちろん、これはかなり明確です。投稿モデルから:counter_cache宣言を削除すると、たとえば

移行は正常に実行されます。この方法で実際に実装することはできなかったため、これは明らかに意味がありません。私は何が欠けていますか?