nil:NilClass 的 RailsAdmin Carrierwave 多重上传未定义方法“文件名”
RailsAdmin Carrierwave Multiple Upload undefined method `filename' for nil:NilClass
按照 Carrierwave 和 RailsAdmin 的说明,我可以使用 aws S3 在 RailsAdmin 中使用 Carrierwave 进行多次上传。尝试删除其中一张图片时,我得到:
undefined method 'filename' for nil:NilClass
资产字段是一个json字段,assets:json
这是我的模型:
attr_accessor :delete_assets
after_validation do
uploaders = assets.delete_if do |uploader|
if Array(delete_assets).include?(uploader.file.filename)
uploader.remove!
true
end
end
write_attribute(:assets, uploaders.map { |uploader| uploader.file.filename })
end
我试过 uploader.file.identifier
但读到在使用 fog aws S3 时应该使用 uploader.file.filename
。
我目前的资源:
RailsAdmin
https://github.com/carrierwaveuploader/carrierwave/blob/master/README.md#multiple-file-uploads
载波:
https://github.com/sferik/rails_admin/wiki/CarrierWave
计算器溢出:
如何从此 json 数组中删除以前上传的图片?非常感谢任何帮助!
这里的问题是某些 uploader
s 没有附加文件。所以你的错误是因为你在 nil
上调用 filename
- 又名 uploader.file
returns 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
否则,您需要走的路线将是验证上传器上是否存在文件,这可能是一个单独的问题。
希望这对您有所帮助 - 如果您有任何问题,请告诉我您的情况:)
按照 Carrierwave 和 RailsAdmin 的说明,我可以使用 aws S3 在 RailsAdmin 中使用 Carrierwave 进行多次上传。尝试删除其中一张图片时,我得到:
undefined method 'filename' for nil:NilClass
资产字段是一个json字段,assets:json
这是我的模型:
attr_accessor :delete_assets
after_validation do
uploaders = assets.delete_if do |uploader|
if Array(delete_assets).include?(uploader.file.filename)
uploader.remove!
true
end
end
write_attribute(:assets, uploaders.map { |uploader| uploader.file.filename })
end
我试过 uploader.file.identifier
但读到在使用 fog aws S3 时应该使用 uploader.file.filename
。
我目前的资源:
RailsAdmin https://github.com/carrierwaveuploader/carrierwave/blob/master/README.md#multiple-file-uploads
载波: https://github.com/sferik/rails_admin/wiki/CarrierWave
计算器溢出:
如何从此 json 数组中删除以前上传的图片?非常感谢任何帮助!
这里的问题是某些 uploader
s 没有附加文件。所以你的错误是因为你在 nil
上调用 filename
- 又名 uploader.file
returns 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
否则,您需要走的路线将是验证上传器上是否存在文件,这可能是一个单独的问题。
希望这对您有所帮助 - 如果您有任何问题,请告诉我您的情况:)