如何在Rails应用程序中限制鼠标点击率?

时间:2011-06-02 20:54:50

标签: javascript ruby-on-rails

我写了一张考勤卡应用程序,我有一个人们可以“打卡”进出的页面。每个人都有一个按钮,可以回拨Ajax来改变他们的状态。有几个人已经发现连续点击一个人的按钮很有趣,所以时钟输入/输出时间的报告页面真的很傻。

我想在打孔页面中添加一个简单的Javascript函数,这会将页面的“可点击性”限制为每5秒一次。我在这里发现了几个other threads这样的事情,但我不太了解JS将这些建议移植到Rails如何进行Ajax调用。

4 个答案:

答案 0 :(得分:3)

嗯,有几种可能性;取决于你想要多少控制。

首先,您可以在JS中限制请求的频率。如前面提到的。 此外,您可以将其作为模型逻辑的一部分,而不是在特定时间内接受更新(也在前面提到过)

我的建议是对每位用户的请求进行评级。有一个很好的机架中间件:http://datagraph.rubyforge.org/rack-throttle/。如果需要,你可以添加自定义,但我认为这是一个好的开始。

答案 1 :(得分:2)

您无法查看记录中的updated_at字段吗?它不会限制“鼠标”点击率,但它会使您的记录每分钟/小时多次 x 更新。

例如,在您的模型中,您可以使用以下内容:

class TimeRecord < ActiveRecord::Base
  validate :throttled_updates, on: :update

  private
  def throttled_updates
    errors.add(:updated_at, "must be more than 5 minutes ago") if self.updated_at < 5.minutes.ago
  end
end 

答案 2 :(得分:1)

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-button_to

选项:禁用 - 使用

您可以在onclick事件后禁用该按钮。用户用户必须重新加载页面才能重新点击。否则,你需要一些JS在超时后重新启用。

答案 3 :(得分:0)

# assumes you use jQuery
link_to 'Toggle', toggle_path, :remote => true, :onclick => '
    var e = $(this);
    if(e.data("busy") == "yes"){
        return false;
    } else {
        e.data("busy", "yes");
        setTimeout(function(){ 
            e.data("busy", "no");
        }, 5000);
    }
  '.gsub("\n", '')

检查http://jsfiddle.net/u42gQ/1/