【问题标题】:Rails 6 undefined local variable or method `private' for #<Pdf:0x00007fc3b0285930> Did you mean? print [closed]Rails 6 undefined local variable or method `private' for #<Pdf:0x00007fc3b0285930> 你的意思是?打印 [关闭]
【发布时间】:2020-08-07 05:13:08
【问题描述】:

大家好,我是 Rails 的新手,我正在尝试上传 pdf,我编写了一个创建和验证功能只接受 pdf,但是在我点击提交后它会抛出这个错误:

错误:

#Pdf:0x00007fc3b0285930 的未定义局部变量或方法 `private' 您的意思是?打印

我的控制器.rb
类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 已上传”

【问题讨论】:

  • 您在 Pdf 类中的 private 关键字之前缺少end
  • 你知道如何使用活动存储验证大小吗?我只想上传小于 1 MB 的文件

标签: ruby-on-rails ruby rubygems ruby-on-rails-5


【解决方案1】:

您的块未对齐。

File.open(attachment_path, 'wb') do |file|

是问题开始的地方,应该有它自己的end,但它使用的结束是似乎用于attachment1 方法的那个。这意味着private 实际上被视为attachment1 方法中的一个方法。

【讨论】:

  • 谢谢您如何使用活动存储验证大小?我只想上传小于 1 MB 的文件
  • 我试过这样但不工作#validates :attachment, attach: true, size: { less_than: 1.megabytes , message: 'PDF 应该小于 1MB' }
  • @Callum 建议您为此创建一个单独的问题,如果您还没有并且它仍然是一个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多