我写了一张考勤卡应用程序,我有一个人们可以“打卡”进出的页面。每个人都有一个按钮,可以回拨Ajax来改变他们的状态。有几个人已经发现连续点击一个人的按钮很有趣,所以时钟输入/输出时间的报告页面真的很傻。
我想在打孔页面中添加一个简单的Javascript函数,这会将页面的“可点击性”限制为每5秒一次。我在这里发现了几个other threads这样的事情,但我不太了解JS将这些建议移植到Rails如何进行Ajax调用。
答案 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", '')