我想讓用戶'創建'和'更新'他們的提交(投注),直到他們的投注是最終的特定日期和時間(不能再創建或更新)爲止。這個過程會每週重複一次。如何防止特定日期和時間的操作?
我對Rails相當陌生,而且我不確定是否有此術語或要搜索的術語。
任何人都可以指向正確的方向嗎?
我想讓用戶'創建'和'更新'他們的提交(投注),直到他們的投注是最終的特定日期和時間(不能再創建或更新)爲止。這個過程會每週重複一次。如何防止特定日期和時間的操作?
我對Rails相當陌生,而且我不確定是否有此術語或要搜索的術語。
任何人都可以指向正確的方向嗎?
可能最簡單的方法就是將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
可能在不同的時區,這取決於您的服務器在哪裏。當你做檢查時,只要認識到這一點,並考慮到這一點,正確地投入時間。
由於您沒有提供具體的實現,所以我不太確定您是否在Ruby或Rails方面遇到問題。但是,考慮到你的問題,當用戶創建下注時,我會在你的數據庫中存儲一個日期時間變量。每當用戶嘗試「更新」下注時,檢查數據庫是否已經過去了創建投注的特定時間。希望這可以幫助。
這是有道理的,但它似乎只工作一次,因爲它會阻止用戶在接下來的幾周內創建新的提交時,當過程重新開始。 – user3232837
我明白了,你可以做的就是在模型中的數據庫列中保存與之相比較的時間(在2014年2月20日的上述代碼中),然後使用管理界面進行編輯,或者使用環境變量,如果你使用的是heroku。這應該可以幫助你解決問題 – derekyau
是的,但不斷移動日期可以讓用戶返回並重新編輯前幾周提交的內容。這會有問題,特別是如果保持得分,他們可以改變他們的分數。 – user3232837