5

我正在使用, rails 5.2,bootstrap-4文件上传成功。我想要的是当我在表格中输入公司名称时,它应该检查.bootstrap_formactive-storagecompany_logo

我试过了,当我在表单中包含错误循环时,它运行良好。

- if @company.errors.any?
  #error_explanation
    %ul
      - @company.errors.full_messages.each do |message|
        %li= message

型号代码

has_one_attached :company_logo
validates :name, :company_logo,presence: true
after_validation :is_logo?, if: Proc.new { |a| a.name? }


def is_logo?
      errors.add(:base, 'Please upload your company logo.') if !self.company_logo.attached?
end

我想要这种带有文件字段的验证 我想要这种带有文件字段的验证

4

1 回答 1

3

实际上 active_storage 不支持验证。

我为存在做了什么:

  class CompanyModel < ApplicationRecord
    has_one_attached :company_logo

    validate :company_logo?

    private

    def company_logo?
      errors.add(:base, 'Please upload your company logo.') unless company_logo.attached?
    end
  end

但这会将文件上传到您的存储并在数据库中创建一个 active_storage blob 字段...

我发现的唯一解决方法是删除存储和数据库字段上的文件(太丑了):

def company_logo?
  # Clean exit if there is a logo
  return if company_logo.attached?

  # Unless add error
  errors.add(:base, 'Please upload your company logo.')

  # Purge the blob
  company_logo.record.company_logo_attachment.blob.purge

  # Purge attachment
  company_logo.purge
end
于 2018-04-16T16:28:12.803 回答