为什么在使用ajax助手时这会创建动作无限循环?

时间:2015-03-08 18:36:38

标签: ruby-on-rails ajax

为什么这个create动作在使用ajax助手时会无限循环?

class UsersController < ApplicationController
    def index
        @user = User.new
        @users = User.all
    end
    def create
        user_params = params.require(:user).permit(:email, :password)
        @user = User.create!(user_params)
        respond_to do |format|
            create.html {redirect_to users_path}
            create.js
        end
    end
end

上述结果导致无限循环的用户被创建。此外,create.js.erb永远不会运行,因此我假设post请求只是一遍又一遍地重新发送。

当我删除respond_to块时,将其替换为简单的重定向,并从表单中删除remote: true,一切正常。

表单(views / users / index.html.erb):

<%= form_for(@user, remote: true) do |form| %>
    <%= form.email_field :email, placeholder: "email" %>
    <%= form.password_field :password, placeholder: "password" %>
    <%= form.submit "Create User" %>
<% end %>

1 个答案:

答案 0 :(得分:1)

你正在一个名为create的方法中调用create而没有中断来跳转循环:

您的respond_to的正确代码必须是:

def create
    user_params = params.require(:user).permit(:email, :password)
    @user = User.create!(user_params)
    respond_to do |format|
        format.html {redirect_to users_path}
        format.js
    end
end