Rails表单多次提交但不知道原因

时间:2011-09-23 11:23:35

标签: ruby-on-rails-3

我的表格如下:

<%= form_for(:session, :url => sessions_path, :remote => true, :html => {:id => 'login_form'}) do |f| %>
    <div class="formRow">
        <%= f.label :email      %><br>
        <%= f.text_field :email, :value => (@email if @email) %>
    </div>
    <div class="formRow">
        <%= f.label :password      %><br>
        <%= f.password_field :password %>
    </div>
    <div class="formRow small">
        <%= link_to "I forgot my password",'#' %>       
    </div>
    <div class="formRow">
            <%= f.submit signin_button_text, :class => "button-big left" %>
    </div>
<% end %>

它转到这个控制器:

def create
        @email = params[:session][:email]
        user = User.authenticate(params[:session][:email],params[:session][:password])
        respond_to do |format|
        if user.nil?
          @title = "Sign in"
          flash.now[:error] = "Invalid email/password combination"
          format.js {render :action => :new }
        else
          sign_in user 
           format.js {render :action => :create }
        end
      end
    end

这是new.js文件:

$('#login_form').replaceWith("<%=escape_javascript(render 'login_form')%>");
if($('.flash-block').length ==0) {
$('#login_form').before("<div class='flash-block error'><span><%=escape_javascript(flash[:error])%></span></div>");
                            }

由于某种原因,如果表单提交错误,则会循环四次。

我不明白为什么。

代码中是否存在导致此循环的内容?

2 个答案:

答案 0 :(得分:0)

我假设您正在使用jquery。这通常发生在呼叫不完整或存在某种错误并且您没有刷新页面时。尝试这样的事情:

<script type="text/javascript">
$('#login_form').submit(function() {
        $(this).unbind('submit').submit();
       });
</script>

答案 1 :(得分:0)

我使用的是Fancybox并没有在iframe中打开它。所以我最终加载了jquery库两次,因此当我提交表单时,我有多次提交。

一旦我在iframe中打开Fancybox,它只提交一次。