如何检查删除图像?我无法检查因为在保存averter.present之前?返回true

时间:2016-10-06 14:05:46

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

我使用carrierwaveuploader/carrierwave: Classier solution for file uploads for Rails, Sinatra and other Ruby web frameworks

@foo.assign_attributes(update_params) #=> update_params includes "remove_avatar"=>"1"
@foo.avatar.present? #=> true
@foo.save
@foo.avatar.present? #=> false
保存present?之前

返回true。保存present?后返回false

我的验证

validate :validate_avatar

def validate_avatar
  # if @foo.avatar deleted and same conditions, add error
end

validate_avatar中,@foo.avatar.present?true,因为在保存之前。

我尝试after_save :validate_avatar

after_save :validate_avatar

def validate_avatar
  # if @foo.avatar deleted and same conditions, add error
  # then return false
end

因为after_save,@foo.avatar.present?false。但Rails5不回滚false

如何检查验证中删除的@foo.avatar

我想检查avatar是否已删除但仍保留图像裁剪数据。所以我需要检查@foo.avater已删除或未删除。 如果删除avatar,则图片裁剪数据也会被删除。请检查验证。

已经在我的项目中删除了所有图像裁剪数据(xxx_crop列)。

2 个答案:

答案 0 :(得分:0)

在您的控制器中,您可以

if @foo.save
  <do whatever>
else
  render json: @foo.errors

所以@foo会有一个errors属性。

答案 1 :(得分:0)

您可以使用new MyClass(name, value)

remove_avatar?

  • 如果@foo.remove_avatar? #=> true or false true
  • ,则会删除头像图片
  • 如果save false
  • ,则无法删除头像图片