【问题标题】:Show Active storage validation errors with form errors显示带有表单错误的活动存储验证错误
【发布时间】:2018-09-26 07:10:59
【问题描述】:

我正在使用rails 5.2bootstrap-4bootstrap_formactive-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

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

【问题讨论】:

  • 在您的 validates :name, :company_logo 行中添加出席:true。
  • @hashrocket 它已经在那里了我忘了添加问题现在我更新了,它不起作用

标签: ruby-on-rails rails-activestorage ruby-on-rails-5.2


【解决方案1】:

其实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

【讨论】:

  • 当对另一个字段进行验证并且文件在file_field 中时,就像你说的文件已上传并在数据库中创建一个active_storage blob 字段,所以有没有办法插入另一个表@ 987654325@ 所以文件上传它不依赖于其他表单错误,因为如果表单中有验证,用户必须再次上传文件,这是不正确的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 2018-01-02
  • 2018-04-19
  • 2014-02-20
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多