【发布时间】:2020-08-07 05:13:08
【问题描述】:
大家好,我是 Rails 的新手,我正在尝试上传 pdf,我编写了一个创建和验证功能只接受 pdf,但是在我点击提交后它会抛出这个错误:
错误:
#Pdf:0x00007fc3b0285930 的未定义局部变量或方法 `private' 您的意思是?打印
我的控制器.rb 控制器: 表格: 但文件正在上传到临时目录,但我无法验证大小,提交后它应该返回“PDF 已上传”
类PDF after_commit :attachment1
#after_commit(on: %i[ create update ]) { attachment_changes.delete(name.to_s).try(:upload) }
has_one_attached :attachment
validates :attachment, presence: true, blob: { content_type: ['application/pdf'] }
#validates :attachment, attached: true, size: { less_than: 1.megabytes , message: 'PDF should be less than 1MB' }
def attachment1
attachment_path = "#{Dir.tmpdir}/#{attachment.filename}"
File.open(attachment_path, 'wb') do |file|
file.write(attachment.download)
end
private
def check_file_type
if attachment.attached? && !attachment.content_type.in?(%w(application/msword application/pdf))
errors.add(:attachment, 'Must be a PDF or a DOC file')
end
end
end
end
class PdfsController < ApplicationController
def index
end
def show
end
def new
@pdf = Pdf.new
end
def create
@pdf = Pdf.new(pdf_params)
if @pdf.save
redirect_to @pdf, notice: 'Pdf was successfully uploaded.'
else
render 'new'
end
end
# def create
# @pdf = Pdf.new(pdf_params)
# if @pdf.save
# #notice: 'Pdf was successfully uploaded'
# notice: 'Pdf was successfully uploaded.'
# else
# redirect_to new_pdf_path
# end
# redirect_to pdfs_path
# end
private
def set_pdf
@pdf = Pdf.find(params[:id])
end
def pdf_params
params.require(:pdf).permit(:attachment)
end
end
<%= form_for Pdf.new do |f| %>
<%= f.file_field :attachment %>
<%= f.submit %>
<% end %>
【问题讨论】:
-
您在 Pdf 类中的 private 关键字之前缺少
end。 -
你知道如何使用活动存储验证大小吗?我只想上传小于 1 MB 的文件
标签: ruby-on-rails ruby rubygems ruby-on-rails-5