我正在使用rails 5.2
,bootstrap-4
,bootstrap_form
,active-storage
文件正在成功上传。我想要的是当我在表单中输入公司名称时,它应该检查company_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
答案 0 :(得分: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