尝试销毁子记录时堆栈级别太深

时间:2012-10-31 16:41:17

标签: ruby-on-rails carrierwave destroy

我正在尝试销毁属于父记录的记录。但是由于stack level too deep错误,Rails不允许我这样做。

我的课程(简化)是这样构建的:

class Album < ActiveRecord::Base
  has_many :photos, dependent: :destroy
  accepts_nested_attributes_for :photos, reject_if: lambda { |p| p[:image].blank? }

  ...
end

class Photo < ActiveRecord::Base
  belongs_to :album

  mount_uploader :image, PhotoUploader
end

当我尝试以下操作时,我得到了例外:

Photo.destroy(12) # where 12 is the ID of the photo I want to destroy
# note that Photo.delete(12) works fine, but doesn't remove the image from the file system

我不明白为什么破坏照片会触发此错误。也许是carrierwave及其mount_uploader

编辑1:这肯定与carrierwave有关。在我的上传器中,我有以下代码被多次调用(直到堆栈太深):

def unprocessed_image_filename
  match_data = /^original_(.+)_\d{14}\.\D{3,4}$/.match(File.basename(model.image.to_s))

  match_data ? match_data[1] : "photo"
end

这用于确定各种版本的名称。

1 个答案:

答案 0 :(得分:1)

unprocessed_image_filename改为使用:model.read_attribute(:image)而不是model.image.to_s似乎已经完成了这一操作。

现在我有不同的问题,但至少我可以按照自己的意愿销毁照片。