我的模型有一个has_many_attached :photos
。
首次创建此模型时,它有0张照片。如果我运行photos.attached?
,我将得到false
。
当用户将一些文件上传到照片时,我需要执行一些操作,但这只是第一次。我尝试使用before_update :if photos.attached?
。但是我需要知道用户是否正在专门更新照片。
有没有办法知道用户是否正在尝试更新照片?还是有一种简单的方法可以做到这一点?
答案 0 :(得分:2)
您可以使用dirty?方法
class Post < ApplicationRecord
has_many_attached :photos
before_update :do_whatever, if: -> { photos.dirty? }
def do_whatever
# doing something
end
end
您也许还可以尝试before_update :do_whatever, if: -> { photos_changed? }
答案 1 :(得分:0)
在rails模型和选项“ on::create”和“ update”中检查回调(after_create,after_save等)。
答案 2 :(得分:0)
Rails尚未添加向文件附件添加验证的功能。参见Issue #31656
尝试这种方法:
验证mime-types
:
<%= f.file_field :photos, accept: "image/png,image/gif,image/jpeg', multiple: true %>
您仍然需要添加模型验证。有关如何使用自定义验证器的信息,请参见此帖子Validating the Content-Type of Active Storage Attachments 。
要限制您的action
仅执行一次,您可以在操作成功终止后向model
添加一个布尔字段并将其设置为true
。按照建议Antarr Byrd使用before_update
,检查每张照片是否已附加到模型上。