问题标签 [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.
ruby-on-rails - 使用 update_attribute 运行 Rails 3 迁移时出现只读错误
我正在尝试添加一个 counter_cache 并且这个 Rails 3 迁移给了我一个我似乎无法解决的错误。
迁移是
错误是:
== AddItemsCountToStore: 迁移 ==========================================--add_column( :stores, :items_count, :integer, {:default=>0}) -> 0.0680s rake 中止!发生错误,此迁移和所有后续迁移均已取消:
items_count 被标记为只读 C:/Ruby192/lib/ruby/gems/1.9.1/gems/activerecord-3.0.0/lib/active_record/persistence.rb:115:in `update_attribute'
有任何想法吗?
ruby-on-rails - 如何使用 test::unit 和 mocha 测试 counter_cache
我很好奇我是否可以以某种方式模拟计数器缓存的测试。现在我正在创建所有记录来测试 counter_cache。有什么好的做法可以有效地测试计数器缓存吗?
编辑: 我只是对测试感兴趣,计数器缓存存在于某个关联上。
ruby-on-rails - 我应该在 Ruby on Rails 3.0 中的计数器缓存列上添加索引吗
环境:Rails 3.0.4、MySQL、Ruby 1.8.7
我有下表:
我经常搜索拥有超过 n 个用户的国家。向计数器缓存“users_count”添加索引是否有意义?
我意识到它会为每个添加的用户增加一点开销,但我想确保在计数器缓存的机制中没有其他我遗漏的东西,
ruby-on-rails - Ruby on Rails 计数器缓存错误
Unknown key(s): counter_cache
尝试在我的 RoR 应用程序中实现计数器缓存列时出现错误。
我在这个问题中实现了模型关联:模型关联问题
这是我的迁移:
但是,在观看http://media.railscasts.com/videos/023_counter_cache_column.mov之后,我想也许我必须:counter_cache => true
在belongs_to :video
. 但是,当我这样做时,我得到了错误:
wrong number of arguments (2 for 1)
我究竟做错了什么?
ruby-on-rails - save(:validate => false) 涵盖了什么?
counter_cache
我刚刚使用这样的代码实现了一些 custom :
我的问题是——除了or之Model.save(:validate => false)
类的东西之外,该命令实际上还能防止什么?validates_with
before_validation
如果我在未经验证的情况下保留现有的保存,我的自定义 counter_caches 会受到影响吗?
sql - 避免单独的数据库调用计数
我的模型如下所示:
当我显示我的演员索引时,我想显示每个演员出演的电影数量。我可以用 来做到这一点@actor.movies.count
,但是这会生成一个 SQL 查询each actor
。假设有 30 个参与者,这将导致除了初始查询之外的 30 个额外查询。
有没有办法在最初的通话中包括每个演员参与的电影数量Actor.all
?从而只需一个电话即可完成工作。如果这是按所述计数排序的额外奖励。
更新:
提供的所有答案都很有帮助,虽然它在某些时候变成了一些肮脏的比赛,但效果很好。我把你所有的建议混为一谈。我在我的 Actor 模型中添加了 movies_counter 列。在我的 Job 模型中,我添加了belongs_to :actor, :counter_cache => :movies_counter
. 这非常有效,并且在我创建或销毁电影时会自动更新,而无需我添加任何进一步的代码。
cakephp - cakephp 嵌套模型中的计数器缓存
我有嵌套模型结构
id
parent_id
counter
name
如何使用自动计数器缓存
ruby-on-rails - Rails 3:仅在发布时更新 counter_cache
这是一个棘手的问题。
我有一个具有多种内容类型的项目,例如文章、评论等。每种内容类型都有评论,评论是多态的,因为它们可以属于任何内容类型。
我想在我的所有内容页面上放置一个总评论计数器以显示有多少评论,我实现了一个计数器缓存来做到这一点。(@article.comments.count 之类的查询更多,并且当我使用 Ancestry gem 进行线程评论时,子评论不计入该数量,仅计入根评论。)
计数器缓存效果很好,并显示了准确的评论数量,但与往常一样,有一个小问题。评论并不总是立即发布,只有注册用户才能立即发布,并且这些评论的 :status 为“2”。未注册用户进入审核队列;这些评论的状态为“1”。
问题是,计数器缓存对它们的计数都是一样的,因此,如果您有 4 条审核评论和 1 条已批准评论,则总数为 5。
如果comment.status不是'2',有没有办法在计数器缓存上添加一个异常来告诉它不要增加?同样,当在评论资源的后端并设置要发布的评论(将其状态设为 2)时,是否有办法(模型、控制器或其他)使其关联的多态/内容类型增加计数器缓存?
评论.rb
文章.rb
ruby-on-rails - 使用“counter_cache”时如何调用 after_save 回调?
我有一个为关联启用了 counter_cache 的模型:
我还为每个“作者”使用了一个缓存片段,并且我想在@author.posts_count
更新时使该缓存过期,因为该值显示在 UI 中。问题是counter_cache
(increment_counter 和 decrement_counter) 的内部似乎没有调用 Author 上的回调,所以除了从 Post 观察者(或缓存清除器)中使缓存过期之外,我无法知道它何时发生只是看起来不那么干净。
有任何想法吗?
ruby-on-rails - 在某些条件下使用 :counter_cache
我有以下模型:
它在 Post 模型中的利用如下:
我想记录两件事:1)特定 post_id 的 entity_tags 的数量。这可以通过 EntityTag 模型中 :post 上的 :counter_cache 来完成。2) 我还想根据特定 post_id 的唯一 :entity_id 值跟踪 UNIQUE EntityTag 的数量。我该如何实现这一目标?我可以使用带有某种约束的 :counter_cache 吗?还是有完全不同的方法?