如何防止特定日期和时间的行为?

时间:2014-05-16 00:15:36

标签: ruby-on-rails

我想允许用户创建'并且'更新'他们的提交(投注),直到特定日期和时间,他们的投注是最终的(不能再创建或更新)。这个过程每周都会重复一次。

我对Rails相当陌生,我不确定是否存在此术语或搜索内容。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分: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可能位于不同的时区。当你做检查时,只要认识到这一点,并在考虑到这一点时正确地投入时间。

答案 1 :(得分:0)

由于您没有提供具体的实现,我不太确定您是否在专门针对Ruby或Rails时遇到问题。但是,根据您的问题,我会在用户创建投注时在您的数据库中存储一个datetime变量。用户每次尝试更新时都会下注,在数据库中检查它是否已经过了远离下注创建的特定时间。希望这会有所帮助。