Ruby on rails 如何防止在特定日期和时间采取行动?

Ruby on rails 如何防止在特定日期和时间采取行动?,ruby-on-rails,Ruby On Rails,我希望允许用户“创建”和“更新”他们的提交(赌注),直到他们的赌注最终确定的特定日期和时间(不能再创建或更新)。这一过程将每周重复一次 我对Rails相当陌生,我不确定是否有一个术语来描述它或搜索什么 有人能给我指出正确的方向吗?实现这一点最简单的方法可能就是在控制器的过滤器(Rails 3.x)或操作(Rails 4.x)之前添加一个。您可以这样做: 假设您有submissions\u controller.rb和类似的创建/更新操作-添加一个只应用于创建和更新操作的before过滤器。然后,

我希望允许用户“创建”和“更新”他们的提交(赌注),直到他们的赌注最终确定的特定日期和时间(不能再创建或更新)。这一过程将每周重复一次

我对Rails相当陌生,我不确定是否有一个术语来描述它或搜索什么


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

实现这一点最简单的方法可能就是在控制器的过滤器(Rails 3.x)或操作(Rails 4.x)之前添加一个
。您可以这样做:

假设您有
submissions\u controller.rb
和类似的创建/更新操作-添加一个只应用于创建和更新操作的before过滤器。然后,您可以在控制器中实现一个私有方法,将用户重定向回您的
根路径
或其他位置,并给出一条关于原因的快速消息

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
class PagesController[:创建,:更新]
def创建
...
结束
def更新
...
结束
私有的
def检查赌注是否为最终赌注
如果Time.now>=Time.new(2014,02,20)
flash[:error]=“您不能再修改或提交新赌注!”
将\重定向到根\路径
结束
结束
结束
但是,除了控制器的操作之外,如果日期已过,为了安全起见(或者如果将来有其他方法更新该对象),实施模型级验证/检查以拒绝它可能会更安全。在保存之前,您可以通过模型钩子
来完成这项工作,在这个钩子中,您几乎可以执行我上面给出的类似检查


另外,另一个警告是比较
时间。根据服务器所在的位置,现在
可能位于不同的时区。当你做检查的时候要意识到这一点,并把时间正确地记在心里

由于您没有提供具体的实现,我不太确定您是否在Ruby或Rails方面遇到了问题。但是,考虑到您的问题,当用户创建赌注时,我会在您的数据库中存储一个datetime变量。每次用户尝试“更新”赌注时,请在数据库中检查该赌注是否已超过创建赌注的特定时间。希望这能有所帮助。

这是有道理的,但它似乎只起作用一次,因为它会阻止用户在随后的几周内重新开始流程时创建新的提交。我明白了,您可以做的是节省比较时间(在上面的代码中,即2014年2月20日)在模型中的数据库列中,然后可以使用管理界面进行编辑,如果使用heroku,则可以使用环境变量。这将有助于你解决问题是的,但不断向前移动日期将允许用户返回并重新编辑前几周提交的内容。这将是一个问题,特别是如果保持分数,他们可能会改变他们的分数。哦,我明白了,所以你说的是,有多个提交属于父对象,比如“竞赛”?在这种情况下,您为什么不提交属于某个竞赛的参赛作品,而某个竞赛有许多参赛作品,那么在竞赛对象上可能有一个
截止日期
属性,您可以设置该属性并进行比较