rails updated_at介于现在和5分钟前的时间之间

时间:2014-11-05 10:10:08

标签: ruby-on-rails activerecord time

我目前在我的rails应用程序中有一个帐户模型,在AccountsController的更新操作中我想检查帐户是否在最近5分钟内更新。

除非帐户在过去5分钟内更新,否则我希望执行特定操作。

换句话说,如果帐户在过去5分钟内未更新 - >跑步。

我很难获得以下代码以反映上面的摘要,遗憾的是,这取决于我在模型中构建方法的方式(例如,updated_at> 5.minutes.ago OR updated_at< 5.minutes.ago)it要么总是运行动作,要么永远不会运行动作。

因此,我相信我可能会对时间和比较产生误解?我需要该方法来检查帐户上次更新的时间,然后确定这是否超过5分钟之前的时间。 (例如,6分钟前,7分钟前等...)如果超过5分钟,那么就开始行动吧!如果没有(例如,4分钟前,1分钟前,5分钟以内的任何事情!)那么不要采取行动吗?

我的帐户管理员:

class AccountsController < ApplicationController
    def update
       respond_to do |format|
  if @account.update(account_params)
    unless @account.updated_recently?
      @account.create_activity :update, owner: current_user, recipient: @account
    end
    format.html { redirect_to( @account )}
    format.json { render json: @account }
  else
    format.html { redirect_to edit_account_url(@account), flash: {danger: 'Something went wrong, try again.'} }
    format.json { render nothing:  true }
  end
end
end
end

我的帐户模型:

class Account < Activerecord::Base
  def updated_recently?
    updated_at > 5.minutes.ago
  end
end

非常感谢

2 个答案:

答案 0 :(得分:1)

您的错误发生是因为您打电话给@account.update(account_params),并更新了updated_at,之后立即检查帐号是否为updated_recently?。为避免这种情况,您可以在更新之前检查它是否最近更新,将其分配给某个局部变量,然后根据此变量的值决定是否应该调用create_activity,如下所示:

updated_recently = @account.updated_recently?
if @account.update(account_params)
  unless updated_recently
    @account.create_activity :update, owner: current_user, recipient: @account
  end
  # ...
end

答案 1 :(得分:0)

updated_recently = @ account.updated_recently? 如果@ account.update(account_params) 除非最近更新 @ account.create_activity:更新,所有者:current_user,收件人:@account 结束