?", 1.m-6ren">
gpt4 book ai didi

ruby-on-rails - Rails - 从 before_create 返回 false 阻止更改其他模型

转载 作者:行者123 更新时间:2023-12-01 04:17:51 25 4
gpt4 key购买 nike

我有一个 before_create过滤器,检查人们是否发表了过多的评论。

如果他们是我想标记他们的帐户。

class Comment < ActiveRecord::Base
before_create :check_rate_limit

def check_rate_limit
comments_in_last_minute = self.user.comments.count(:conditions => ["comments.created_at > ?", 1.minute.ago])
if comments_in_last_minute > 2
user.update_attribute :status, "suspended"
return false
end
true
end
end

before 过滤器返回 false 以停止创建评论。问题是这会触发 ROLLBACK,这也会撤消我对用户模型所做的更改。

实现此目的的正确模式是什么?具体来说:每次创建对象时运行检查,如果检查失败,可以编辑另一个模型。

最佳答案

我认为限制速率的最佳方法是将请求排队并以最大允许速率读取它们。

标记过度使用的触发器只是成为队列中一定数量的请求。

它还具有不会立即影响后面的数据库的优点,因为它允许在更好的可控排队系统中将瓶颈移到数据库之前。这允许 hte 站点即使在“攻击”下也能保持响应。

这些队列可以像带有链表的哈希图一样简单。但如果可用,最好使用一些线程安全的先进先出

关于ruby-on-rails - Rails - 从 before_create 返回 false 阻止更改其他模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2983551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com