2014-11-05 57 views
0

我目前有一個帳戶模型在我的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更新,緊接着又發生

+0

如果您調用'@ account.update(account_params)',它會更新'updated_at',並且之後立即檢查賬戶是否是'updated_recently?',這就難怪你會得到這樣的行爲。 – 2014-11-05 10:12:48

+0

哦,當然是! - 我可以將其移出「@ account.update(account_params)」,但如果帳戶無法更新?我將執行一個可以運行的操作(因爲我的條件已滿足),但是沒有更新的帳戶 - 只有當帳戶成功更新時纔有這種運行方式嗎?謝謝 – drac 2014-11-05 10:21:28

+0

您可以在更新之前檢查它是否最近更新,將其分配給某個局部變量,然後根據此變量的值決定是否應調用'create_activity'。 – 2014-11-05 10:27:27

回答

1

你的錯誤您檢查帳戶是否爲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 
+0

我明白了,謝謝你的幫助 – drac 2014-11-05 10:32:35

相關問題