Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如果用户拥有10个以上的项目,Rails 3将销毁数据库中最旧的项目_Ruby On Rails 3_Android Activity_Model_Sti - Fatal编程技术网

Ruby on rails 3 如果用户拥有10个以上的项目,Rails 3将销毁数据库中最旧的项目

Ruby on rails 3 如果用户拥有10个以上的项目,Rails 3将销毁数据库中最旧的项目,ruby-on-rails-3,android-activity,model,sti,Ruby On Rails 3,Android Activity,Model,Sti,我在rails 3中使用STI设计了一个活动流 我想做一个检查,看看一个用户在创建时是否有超过10个活动项。当用户在数据库中创建第11个活动时,我希望它销毁最旧的记录*基本上是用户创建的第一个记录,依此类推。*这样,我就可以保持数据库中数千条旧的无用记录的干净 我假设我将从模型级别开始,但是因为我不想在模型中定义“当前用户”,它应该在控制器中 如果您能帮我完成这项任务,我将不胜感激。我对rails中的这类更高级的任务相当陌生。您可以在AR回调中连接这一逻辑。假设在建模类时保持rails约定,并且

我在rails 3中使用STI设计了一个活动流

我想做一个检查,看看一个用户在创建时是否有超过10个活动项。当用户在数据库中创建第11个活动时,我希望它销毁最旧的记录*基本上是用户创建的第一个记录,依此类推。*这样,我就可以保持数据库中数千条旧的无用记录的干净

我假设我将从模型级别开始,但是因为我不想在模型中定义“当前用户”,它应该在控制器中


如果您能帮我完成这项任务,我将不胜感激。我对rails中的这类更高级的任务相当陌生。

您可以在AR回调中连接这一逻辑。假设在建模类时保持rails约定,并且每个活动都属于一个用户,那么您可以在
活动
模型中轻松执行以下操作:

after_save do |record|
  if Activity.where(:user => record.user).count >= 11
    Activity.where(:user => record.user).order('created_at asc').first.destroy
  end
end

我猜这将为数据库创建三个事务(一个用于计数,另一个用于查找第一条记录,另一个用于删除它)。我想知道是否有更有效的方法来实现这一点,因为它将在每个
活动#save

中调用。您可以在AR回调中连接此逻辑。假设在建模类时保持rails约定,并且每个活动都属于一个用户,那么您可以在
活动
模型中轻松执行以下操作:

after_save do |record|
  if Activity.where(:user => record.user).count >= 11
    Activity.where(:user => record.user).order('created_at asc').first.destroy
  end
end

我猜这将为数据库创建三个事务(一个用于计数,另一个用于查找第一条记录,另一个用于删除它)。我想知道是否有更有效的方法来做到这一点,因为它将在每个
活动#save

中调用。哦,你是一个救生员!既然你在质疑它的效率,我现在还不会勾选它,但是如果今天没有人回应,我会勾选它,太棒了!!很乐意帮忙。但老实说,在现实世界中我不会这么做。相反,您可以始终为活动模型提供一个类方法或范围,以获取给定用户的最新10个活动。这样,您就可以保留所有用户活动的历史记录,并且不会浪费资源在每次
活动#save
呼叫时额外查询数据库。哦,您是一个救生员!既然你在质疑它的效率,我现在还不会勾选它,但是如果今天没有人回应,我会勾选它,太棒了!!很乐意帮忙。但老实说,在现实世界中我不会这么做。相反,您可以始终为活动模型提供一个类方法或范围,以获取给定用户的最新10个活动。这样,您就可以保留所有用户活动的历史记录,并且不会浪费资源在每次
活动#save
调用时额外查询数据库。