如何使用json渲染@ photo.errors(在Rails 4中使用dropzone.js)

Heroku控制台:

开始POST“/照片”
由PhotosController处理#create为JSON
参数:{“utf8”=>“✓”,“authenticity_token”=>“D5pc72xeJ6J / g ==”,“photo”=> {“title”=>“fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff”,“tag_list”=> [“”], “picture”=>#,@ original_filename =“size.jpg”,@ content_type =“image / jpeg”,@ headers =“Content-Disposition:form-data; name = \”photo [picture] \“; filename = \“size.jpg \”\ r \ nContent-Type:image / jpeg \ r \ n“>},”null“=>”“,”commit“=>”上传“}
在941ms内完成500内部服务器错误(ActiveRecord:13.9ms)
ArgumentError(’#,@ message = {:title => [“太长(最多30个字符)”]}>’不是与ActiveModel兼容的对象。它必须实现:to_partial_path。):
app / controllers / photos_controller.rb:40:在’block(2 level)in create’中

PhotosController

def create @photo = current_user.photos.build(photo_params) respond_to do |format| if @photo.save format.html { redirect_to @photo, notice: 'Item was successfully created.' } format.json { render json: @photo } else format.html { render 'new'} **rb:40** (format.json { render @photo.errors, status: :unprocessable_entity } end end end 

dropzonephotos.js

 $(document).ready(function() { var dropzone; Dropzone.autoDiscover = false; dropzone = new Dropzone('#dropform', { maxFiles: 2, maxFilesize: 3, paramName: 'photo[picture]', headers: { "X-CSRF-Token": $('meta[name="csrf-token"]').attr('content') }, addRemoveLinks: true, clickable: '.dz-default.dz-message', previewsContainer: '.dz-default.dz-message', thumbnailWidth: 200, thumbnailHeight: 200, parallelUploads: 100, autoProcessQueue: false, uploadMultiple: false }); $('#item-submit').click(function(e) { e.preventDefault(); e.stopPropagation(); if (dropzone.getQueuedFiles().length > 0) { return dropzone.processQueue(); } else { return $('#dropform').submit(); } }); return dropzone.on('success', function(file, responseText) { return window.location.href = '/photos/' + responseText.id; }); return dropzone.on('error', function(file, errorMessage, xhr) { console.log('error'); }); }); 

validation失败时,视图中不会显示任何错误。 dropzone缩略图上只有一个“X”,并在hover“内部服务器错误”时显示一条消息。 缩略图仍显示在视图中,尽管它实际上已被删除。 如果我再次点击提交,表单将被处理为html,因为dropzone / no json中没有要提交的照片。

所以我决定用表格里面的Rails Active Record Validation Errors而不是担心这个,这可能是不可能的,因为表格是由json提交的,Rails助手可能没有设置为这样工作,我决定通过将错误附加到视图中,使用dropzone.on('error', function(file, errorMessage)的.js文件本身手动执行此操作。