Rails:加载时限制POST请求

时间:2015-03-19 17:40:34

标签: ruby-on-rails controller request

嗨,如果标题听起来不是很具描述性,目前我在我的rails应用程序中遇到了严重问题,它是一个有条理的应用程序,因此用户可以创建分类广告,所以问题是当用户试图创建一个clasified,有时它由于大量的流量加载几秒钟,有一些不耐烦的用户点击"创建"窗体中的按钮多次,结果是:用户多次创建相同的分类广告,我的意思是,当用户等待时,如果他再次点击创建新按钮请求的创建按钮,那么为什么会有分类是多次创建的。我不知道如何解决这个问题,任何想法?

更新 我想实现服务器端解决方案,而不是前端,我的意思是有没有办法通过控制器验证这一点?还是观点本身?感谢

4 个答案:

答案 0 :(得分:1)

我的建议是在所有按钮中使用library(ggplot2) library(dplyr) library(scales) library(lubridate) data.frame(Month = months(ymd(c("2015-01-01", "2015-01-01","2015-01-01", "2015-02-01","2015-02-01","2015-02-01"))), types = rep(LETTERS[1:3],2), percent = c(0.2,NA,NA,.39,.89,.59)) %>% mutate(Month = factor(Month, levels = month.name), label = ifelse(!is.na(percent), paste0(round(percent*100), "%"), "")) %>% ggplot() + aes(x = Month, y = percent, fill = types) + geom_bar(stat = "identity", position = position_dodge(w = 0.75)) + geom_text(position = position_dodge(w = 0.75), aes(ymax = percent, label = label)) 属性,这对您有用:

data-disabled-with

这种方式每次单击一个按钮时,它将被禁用,防止双重提交,并且还会显示“请等待......”文本

如果您在表单中使用客户端验证,请务必小心。在这种情况下,您必须手动删除<%= f.submit "Submit", data: { disable_with: "Wait please..." } %> 属性,否则您的按钮将保持禁用状态。

答案 1 :(得分:0)

我遇到了类似的问题......有两种可靠的解决方案可以防止多次提交表单: -

  1. 使用来自jquery的one事件处理程序,只允许触发一次

    例如

    $("#post_submit_button").one("click", function(){
       //run ajax call and use .done and .error notify user
    });
    
  2. 其他选项是使用真棒jqeury.validate js库来使用实时验证而不提交表单,当所有值都有效时,提交并禁用该按钮。

  3. 例如

    $("form#imageupload").validate({
            rules: {
            "image[title]": {
                      required: true,
                      minlength: 3,
                      maxlength: 100
                    }, 
                     submitHandler: function(form) {
                        //disable the button
                       $('#post_button').attr('disabled','disabled');
                       var formData = new FormData(form);
                    $.ajax(
                     })
                      .done(function (response) {
                          if (response.success == 'success') {               
                              //alert('success');    
    
                          } else {
                              //alert('fail');
                                                 }
                      }).error(function(data) {
                        //this will run when no server,or ajax cannot go forward
                              $('#post_button').removeAttr('disabled');
    
                      });
                 return false; // required to block normal submit since you used ajax
    
            }
    

答案 2 :(得分:-1)

为提交按钮指定disable_with选项。它应该可以部分解决你的问题。

答案 3 :(得分:-2)

我会使用处理你的POST函数的函数返回一个重定向到一个与“创建”按钮相同的页面,只有按钮处于非活动状态

相关问题