我有一个自定义验证功能,用于确保模型中的文件大小不大。我使用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">×</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文件?
由于
答案 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"}