我目前有一個帳戶模型在我的rails應用程序,在AccountsController的更新操作內我想檢查一個帳戶是否已在最近5分鐘內更新。rails updated_at之間的時間現在和時間5分鐘前
除非帳戶在最近5分鐘內更新,否則我想運行特定操作。
換句話說,如果賬戶在最近5分鐘內沒有更新 - >執行操作。
Im努力得到下面的代碼來反映我上面的總結,不幸取決於我在我的模型中構造方法的方式(例如,updated_at> 5.minutes.ago或updated_at < 5.minutes.ago)它或者始終運行該操作或從不運行該操作。
因此,我相信我可能會對時間和比較有誤解嗎?我需要使用該方法來檢查上次更新帳戶的時間,然後決定是否從現在開始超過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
非常感謝,因爲你打電話給你打電話@account.update(account_params)
,它的updated_at更新,緊接着又發生
如果您調用'@ account.update(account_params)',它會更新'updated_at',並且之後立即檢查賬戶是否是'updated_recently?',這就難怪你會得到這樣的行爲。 – 2014-11-05 10:12:48
哦,當然是! - 我可以將其移出「@ account.update(account_params)」,但如果帳戶無法更新?我將執行一個可以運行的操作(因爲我的條件已滿足),但是沒有更新的帳戶 - 只有當帳戶成功更新時纔有這種運行方式嗎?謝謝 – drac 2014-11-05 10:21:28
您可以在更新之前檢查它是否最近更新,將其分配給某個局部變量,然後根據此變量的值決定是否應調用'create_activity'。 – 2014-11-05 10:27:27