我正在使用ajax提交完成头像上传和裁剪.
我通过ajax发送base64图像然后我将我的图像转换为carrierwave.
一切正常,除了ajax响应:模板缺失.
这是我的ajax电话:
$.ajax({ type: "post",dataType: "json",url: "/profile/update_avatar",data: { image: canvas.toDataURL() } }) .done(function(data) { // You can pull the image URL using data.url,e.g.: $('.user-image').html('<img src="'+data.url+'" />'); });
这是我的控制器:
def update_avatar respond_to do |format| if current_user.update_cropped_avatar(params[:image]) format.js format.html { render :nothing => true,:notice => 'Update SUCCESSFUL!' } else format.html { render :action => "edit" } format.json { render :json => current_user.errors,:status => :unprocessable_entity } end end
结束
我不需要渲染模板……但错误是:
Missing template profiles/update_avatar,application/update_avatar with {:locale=>[:it],:formats=>[:js,:html],:handlers=>[:erb,:builder,:raw,:ruby,:coffee,:haml]}.
为什么?
解决方法
问题将是你使用:
respond_to do |format| format.js
我知道你把JSON发送到Rails,但是当你的头像正确发送时,你似乎只处理标准的script
dataType.您对format.js的使用基本上导致rails在您的views文件夹中查找action_name.js.erb – 因此您的模板错误
respond_to do |format| format.js { render nothing: true }
固定
在与Roberto聊天聊天之后,这对他有用:
def update_avatar respond_to do |format| if current_user.update_cropped_avatar(params[:image]) format.json { render :json => current_user.profile.avatar_url,:status => 200 } format.html { render :nothing => true,:notice => 'Update SUCCESSFUL!' } else format.html { render :action => "edit" } format.json { render :json => current_user.errors,:status => :unprocessable_entity } end end end