1

我有一个存储名为 kpivalue 的对象的记录的应用程序。每个用户可以存储有限数量的记录,数千条。所以我需要知道用户何时达到限制。

我知道我可以计算它们,例如使用 active_record 的 after_create 回调检查状态。

但是有没有更优化的方法呢?所以我不需要在创建后计算?达到限制时会触发动作的东西。

我将 Heroku 与 postgresql 和 Rails 3.2.8 一起使用

4

2 回答 2

0

after_create是 Rails 处理这个问题的方法。如果您需要更高的效率,您可以使用 SQL 触发器在达到限制时引发 SQL 异常,这可能比在应用程序级别进行检查要快一些。这也将以更强大的方式强制执行检查,因为您将无法打破 ActiveRecord 模型之外的限制,即使在 rails 应用程序之外使用直接 SQL 查询也不行。话虽这么说,这after_create可能是您所需要的,并且比 SQL 触发器更易于使用。

于 2013-08-08T13:44:19.137 回答
0

当关联中的项目数量达到一定数量时,您可以触发操作,但除非他们尝试添加超过限制的数量,否则您真的需要担心吗?

相反,我建议您通过阻止用户超过限制来解决此问题,而不是响应他们达到限制。

您可以像这样验证关联项目的数量:

class User
  has_many :kpivalues
  validate :kpivalues_within_limit

private

  def kpilimit
    5000
  end

  def kpivalues_within_limit
    return if self.kpivalues.blank?
    errors.add("You may only have #{kpilimit.to_s} kpivalues") if self.kpivalues.count > kpilimit
  end
end
于 2013-08-08T13:05:11.123 回答