2014-05-16 73 views
-2

我想讓用戶'創建'和'更新'他們的提交(投注),直到他們的投注是最終的特定日期和時間(不能再創建或更新)爲止。這個過程會每週重複一次。如何防止特定日期和時間的操作?

我對Rails相當陌生,而且我不確定是否有此術語或要搜索的術語。

任何人都可以指向正確的方向嗎?

回答

1

可能最簡單的方法就是將before_filter(Rails 3.x)或before_action(Rails 4.x)添加到您的控制器。你可以這樣做:

假設你有submissions_controller.rb這樣的創建/更新動作就像這樣 - 添加一個只適用於創建和更新操作的過濾器。然後,您可以在控制器中實施私有方法,將用戶重定向回root_path或其他地方,並給出關於原因的Flash消息。

class PagesController < ApplicationController 
    before_filter :check_if_bets_are_final, :only => [:create, :update] 

    def create 
    ... 
    end 

    def update 
    ... 
    end 

    private 
    def check_if_bets_are_final 
     if Time.now >= Time.new(2014, 02, 20) 
     flash[:error] = "You can no longer modify or submit new bets!" 
     redirect_to root_path 
     end 
    end 

end 

除了你的控制器動作,雖然,它可能會更安全,實現模型級的驗證/檢查,拒絕它,如果日期是過去的,只要是安全的(或者,如果您有其他的方式來更新將來的這個對象)。你可以通過模型鉤子before_save來做到這一點,在這個模型中你幾乎可以做一個類似的檢查,我已經在上面給出了。

此外,另一個警告是,比較Time.now可能在不同的時區,這取決於您的服務器在哪裏。當你做檢查時,只要認識到這一點,並考慮到這一點,正確地投入時間。

+0

這是有道理的,但它似乎只工作一次,因爲它會阻止用戶在接下來的幾周內創建新的提交時,當過程重新開始。 – user3232837

+0

我明白了,你可以做的就是在模型中的數據庫列中保存與之相比較的時間(在2014年2月20日的上述代碼中),然後使用管理界面進行編輯,或者使用環境變量,如果你使用的是heroku。這應該可以幫助你解決問題 – derekyau

+0

是的,但不斷移動日期可以讓用戶返回並重新編輯前幾周提交的內容。這會有問題,特別是如果保持得分,他們可以改變他們的分數。 – user3232837

0

由於您沒有提供具體的實現,所以我不太確定您是否在Ruby或Rails方面遇到問題。但是,考慮到你的問題,當用戶創建下注時,我會在你的數據庫中存儲一個日期時間變量。每當用戶嘗試「更新」下注時,檢查數據庫是否已經過去了創建投注的特定時間。希望這可以幫助。

相關問題