存在回形针验证:真不工作
Paperclip validation present: true not working
我在我的 Rails 应用程序中使用带有 S3 的 Paperclip。这是我的模型:
has_attached_file :cv,
storage: :s3,
s3_host_name: 's3-eu-west-1.amazonaws.com',
s3_credentials: {access_key_id: ENV["AWS_KEY"],
secret_access_key: ENV["AWS_SECRET"],
bucket: ENV["AWS_BUCKET"]
}
validates_attachment_presence :cv, message: "No file."
validates_attachment_file_name :cv, matches: [/pdf\Z/, /docx\Z/, /doc\Z/, /txt\Z/], message: "Formats just in .pdf, .doc a docx."
validates_with AttachmentSizeValidator, attributes: :cv, less_than: 3.megabytes, message: "Too large."
这是我的控制器
def create
@doc = Document.new(doc_params)
if @doc.save
redirect_to users_new_path(token: @doc.token)
else
flash[:alert] = @doc.errors.messages.first.second.first
redirect_to documents_new_path
end
end
def doc_params
params.require(:document).permit(:cv)
end
在 params 中,它只是文件,没有别的。一切正常 - S3,file_name 的验证,大小...唯一不起作用的是 present 的验证。
如果没有添加文件,我收到一个错误:
param is missing or the value is empty: document
我希望改为重定向并显示自定义错误消息。我尝试了其他命令来验证 PaperClip 文档中的存在性,但没有成功。怎么了?
编辑: 表单代码:
<%= form_for @doc do |f| %>
<div class="input-group input-group-lg" id="fileupload">
<span class="input-group-btn">
<span class="btn btn-default btn-file" id="gray-button">
<i class="glyphicon glyphicon-file"></i>
<%= f.file_field :cv, id: "fileopen", type: "file" %>
</span>
</span>
<input type="text" class="form-control text-center" id="filepath" placeholder="Find your file..." readonly>
</div>
<br>
<%= f.button :cv, type: "submit", id: "upload-button", class: "btn-lg btn-primary" do %>
UPLOAD
<%end%>
<%end%>
将您的强参数替换为:-
def doc_params
params.fetch(:document, {}).permit(:cv)
end
当文件未上传时,您的参数将不包含文档密钥,而您的强参数 'requires' 它。
我在我的 Rails 应用程序中使用带有 S3 的 Paperclip。这是我的模型:
has_attached_file :cv,
storage: :s3,
s3_host_name: 's3-eu-west-1.amazonaws.com',
s3_credentials: {access_key_id: ENV["AWS_KEY"],
secret_access_key: ENV["AWS_SECRET"],
bucket: ENV["AWS_BUCKET"]
}
validates_attachment_presence :cv, message: "No file."
validates_attachment_file_name :cv, matches: [/pdf\Z/, /docx\Z/, /doc\Z/, /txt\Z/], message: "Formats just in .pdf, .doc a docx."
validates_with AttachmentSizeValidator, attributes: :cv, less_than: 3.megabytes, message: "Too large."
这是我的控制器
def create
@doc = Document.new(doc_params)
if @doc.save
redirect_to users_new_path(token: @doc.token)
else
flash[:alert] = @doc.errors.messages.first.second.first
redirect_to documents_new_path
end
end
def doc_params
params.require(:document).permit(:cv)
end
在 params 中,它只是文件,没有别的。一切正常 - S3,file_name 的验证,大小...唯一不起作用的是 present 的验证。
如果没有添加文件,我收到一个错误:
param is missing or the value is empty: document
我希望改为重定向并显示自定义错误消息。我尝试了其他命令来验证 PaperClip 文档中的存在性,但没有成功。怎么了?
编辑: 表单代码:
<%= form_for @doc do |f| %>
<div class="input-group input-group-lg" id="fileupload">
<span class="input-group-btn">
<span class="btn btn-default btn-file" id="gray-button">
<i class="glyphicon glyphicon-file"></i>
<%= f.file_field :cv, id: "fileopen", type: "file" %>
</span>
</span>
<input type="text" class="form-control text-center" id="filepath" placeholder="Find your file..." readonly>
</div>
<br>
<%= f.button :cv, type: "submit", id: "upload-button", class: "btn-lg btn-primary" do %>
UPLOAD
<%end%>
<%end%>
将您的强参数替换为:-
def doc_params
params.fetch(:document, {}).permit(:cv)
end
当文件未上传时,您的参数将不包含文档密钥,而您的强参数 'requires' 它。