使用Ajax处理错误消息

时间:2015-02-02 22:49:40

标签: ruby-on-rails ruby validation ruby-on-rails-4 carrierwave

我有一个自定义验证功能,用于确保模型中的文件大小不大。我使用carrierwave上传文件

我通过ajax提交表单,如果有错误,我会渲染我的js.erb

# Document model
class Document < ActiveRecord::Base
  mount_uploader :media, MediaUploader
  belongs_to :user
  belongs_to :skill

  validates :media, presence: { message: 'At least 1 File is required' }
  validate :media_size_validation, :if => "media?"

  def media_size_validation
    if media.size > 1.megabytes
      errors.add(:document, "Files should be less than 1MB")
    end
  end
end

控制器

def create
  @document = current_user.documents.new(document_params)
   respond_to do |format|
     if @document.save
      format.html { redirect_to root_path, notice: success_save_msg }
      format.js
     else
      format.html
      format.js { render action: 'create.js.erb' }
     end
   end
 end

因此,如果我上传一个没有文件(:媒体)的文件,我会收到一个错误,但是如果我上传的文件超过1mb,我会得到

`Missing template documents/create, application/create`

表格

<% if @document.errors.any? %>
<div id="error_explanation" class="alert-dismissable">
  <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
  <h2><%= pluralize(@document.errors.count, "error") %> prohibited this record from being saved</h2>
    <ul class="error_list">
      <% @document.errors.full_messages.each do |msg| %>
        <li><%= error_edit(msg) %></li>
      <% end %>
    </ul>
</div>
  

如果载波图像验证失败,我在处理错误时会遗漏一些内容吗?为什么我的创建操作不会渲染我的js.erb文件?

由于

1 个答案:

答案 0 :(得分:0)

我发表了自己的答案。

我的第一个验证(空白表单)是在JS正在处理表单时呈现错误消息:

Processing by DocumentsController#create as JS

但是,当我附加文件时,该过程就是HTML

Processing by DocumentsController#create as HTML

我需要通过浏览器处理XHR请求的方式来查看细节和复杂性,但是通过添加gem remotipart它现在可以正常工作

查看请求中的参数

"X-Requested-With"=>"IFrame", "X-Http-Accept"=>"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01"}