在"Working With Javascript" section of the Rails Edge Guides中,给出了如何在“用户”控制器中构建“创建”动作的示例,以便将AJAX集成到创建动作中:
# app/controllers/users_controller.rb
# ......
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.js {}
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
我读过here,需要'format.js'和'format.json',因为Javascript和JSON是不同类型的响应。我的问题是,如果在'create'动作的if语句的前半部分中指定了两种格式,为什么下半场也不需要这两种格式?这是否意味着Javascript在成功时使用'create.js.erb'文件,而不是在失败时使用?
答案 0 :(得分:0)
是的,你是对的。基于浏览指南,看起来你不想在失败的情况下对js做任何事情。如果你要把
format.js {}
在故障块中,然后它会尝试执行render @user
部分,这可能会导致错误。
如果您确实想要在发生故障时执行js块,您可以像其他格式一样执行此操作。