ruby-on-rails - 验证失败时如何防止主动存储更新模型?
问题描述
我的用户模型has_one_attached :avatar
这里我有一些验证方法
validate :validate_avatar_presence
validate :validate_avatar_format
validate :validate_avatar_size
private
def validate_avatar_presence
errors.add(:avatar, 'should exist') unless self.avatar.attached?
end
def validate_avatar_size
if self.avatar.attached?
purge_avatar('File is too big') if self.avatar.blob.byte_size > 2000000
end
end
def validate_avatar_format
if self.avatar.attached?
purge_avatar('Wrong format') unless self.avatar.blob.content_type.starts_with?('image/')
end
end
def purge_avatar(msg)
errors.add(:avatar, msg)
avatar.purge_later
end
无论我上传什么,用户头像都会更新。如果验证失败,头像变为 nil,否则我会得到我上传的内容。我试图通过 before_update 回调进行验证。它不起作用。
解决方案
Active Storage 目前不支持验证,但 Rails 6.0 将提供全面支持。在 6.0 发布之前,使用 Rails master,它可以避免在验证失败时存储文件。
推荐阅读
- ios - 如何修复崩溃“UIStatusBarDisplayItemState updatePlacement”?
- wxwidgets - GhostBSD/FreeBSD GNOME 崩溃
- java - 如何访问由构造函数生成的对象变量
- reactjs - React 中的响应式背景图像
- snakemake - 在多个集群环境(LSF、SGE)中具有 mem_mb 资源的 Snakemake 集群命令
- python - 每当我的 MySQL 数据库更改(插入)时,是否可以向我的 python 应用程序发送实时通知?
- python - TensorFlow Dense Layers:一维权重?
- mysql - 如何总结没有公共假期的假期?
- linux - debian 9 - 在关机时挂机,而不是在重启时挂机?
- mysql - 如何在单列中加入codeigniter中的两个表