限制对Rails控制器3X中的操作的请求

时间:2014-12-10 12:10:40

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我想知道是否可以限制rails中的请求数量。我试图填补这个( WITHOUT DB ),但无法使用实例变量,以便用户只能调用动作只有5个fimes.I需要这个来显示用户可以用来填充和添加更多细节的空表单,但只有五个表单。所以可以不使用DB并实现{{1}或者仅限于5次的东西

1 个答案:

答案 0 :(得分:0)

简短回答:是的。但不是没有数据存储。

你有几个选择:

  1. 会话(客户端)
  2. 数据库(服务器端)
  3. 密钥/值存储,如Redis(服务器端)
  4. ...
  5. 使用会话的示例

    class SomeController
      def some_action
        session[:some_action_request_count] ||= 0 
        if session[:some_action_request_count] >= 5
          # cleanup
          # flash messages
          # rendering
        else
          session[:some_action_request_count] += 1
          # do somethign
          # rendering
        end
      end
    end
    

    为什么必须使用某种数据存储?因为通常ruby(web)服务器运行多个不共享状态的进程。而且您不能保证每个请求都进入同一个进程。因此,您需要将数据保留在正在运行的服务器进程之外。这就是为什么你不能使用实例变量的原因:因为将在一个单独的进程中为你的下一个请求创建一个新实例。