Проблема в том, что uploader
не имеет прикрепленного файла.Итак, ваша ошибка в том, что вы звоните filename
на nil
- он же uploader.file
возвращает nil
.
Вы, вероятно, захотите обработать это вхождение, что-то вроде следующего:
attr_accessor :delete_assets
after_validation do
uploaders = assets.delete_if do |uploader|
next unless uploader.file # <-- skip deleting assets without a file
if Array(delete_assets).include?(uploader.file.filename)
uploader.remove!
true
end
end
write_attribute(:assets, uploaders.map { |uploader| uploader.file.filename })
end
Или, если вы предпочитаете удалить все активы, в которых отсутствует файл:
attr_accessor :delete_assets
after_validation do
uploaders = assets.delete_if do |uploader|
next true unless uploader.file # <-- note 'true' added here
if Array(delete_assets).include?(uploader.file.filename)
uploader.remove!
true
end
end
write_attribute(:assets, uploaders.map { |uploader| uploader.file.filename })
end
В противном случае маршрут, по которому вам нужно пройти, будет проверять наличие.файла на загрузчике, который, вероятно, является отдельным вопросом.
Надеюсь, это поможет - дайте мне знать, как у вас обстоят дела или если у вас есть какие-либо вопросы здесь:)