开发者

Rails form submitted multiple times but don't know why

开发者 https://www.devze.com 2023-04-08 10:30 出处:网络
I have a form as follows: <%= form_for(:session, :url => sessions_path, :remote => true, :html => {:id => \'login_form\'}) do |f| %>

I have a form as follows:

<%= 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 =>开发者_JAVA技巧 (@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 %>

It goes to this controller:

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

Here is the new.js file:

$('#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>");
                            }

For some reason if the form is submitted with errors it loops four times.

I don't understand why.

Is there something in the code that causes this to loop?


I am assuming that you are using jquery. This is usually happened when there is an incomplete call or there is some sort of error and you haven't refresh the page. Try something like this:

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


I was using Fancybox and was not opening it in an iframe. So I wound up loading the jquery libraries twice and thus when I submitted the form I had multiple submissions.

Once I opened Fancybox in an iframe it submitted only once.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号