Ruby on rails 查找'的原因;堆栈级别太深';销毁文件时在Carrierwave中
我不知道如何发布这个问题,所以我把它扔到这里: 我在多态附件模型上使用Carrierwave:Ruby on rails 查找'的原因;堆栈级别太深';销毁文件时在Carrierwave中,ruby-on-rails,ruby-on-rails-4,carrierwave,Ruby On Rails,Ruby On Rails 4,Carrierwave,我不知道如何发布这个问题,所以我把它扔到这里: 我在多态附件模型上使用Carrierwave: class Attachment < ActiveRecord::Base mount_uploader :file, AttachmentUploader, :mount_on => :file_name belongs_to :attachable, :polymorphic => true before_save :update_file_attributes
class Attachment < ActiveRecord::Base
mount_uploader :file, AttachmentUploader, :mount_on => :file_name
belongs_to :attachable, :polymorphic => true
before_save :update_file_attributes
validates :file, file_size: { maximum: 15.megabytes.to_i }
private
def update_file_attributes
if file.present? && file_name_changed?
self.digest = Digest::MD5.new.file(file.file.path).hexdigest
end
end
end
我的上传程序创建了两个版本:(基于中的代码)
起初我认为这与接受
的嵌套属性有关,但运行Attachment.first.destroy代码>产生了相同的结果
所以我的问题是,当SystemStackError
没有显示跟踪时,应该如何调试它呢?事实证明,这可能是误导性的
我假设model.file.file.extension
也可以用在full\u filename
中。原来它不能:model.file.file
使用full\u文件名
获取文件名。这是在创建一个无限循环,因此是一个SystemStackError
我选择的解决方案是一个简单的文件。extname
:
class AttachmentUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/projects/#{model.attachable.project.to_param}/attachments/#{model.id}/#{model.digest}/"
end
version :large do
process resize_to_fit: [700, 700]
def full_filename (for_file = model.file.file)
"large#{File.extname(for_file)}"
end
end
version :thumbnail, from_version: :large do
process resize_to_fill: [250, 250]
def full_filename (for_file = model.file.file.extension)
"thumbnail#{File.extname(for_file)}"
end
end
end
类AttachmentUploader
class AttachmentUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/projects/#{model.attachable.project.to_param}/attachments/#{model.id}/#{model.digest}/"
end
version :large do
process resize_to_fit: [700, 700]
def full_filename (for_file = model.file.file)
"large.#{model.file.file.extension}"
end
end
version :thumbnail, from_version: :large do
process resize_to_fill: [250, 250]
def full_filename (for_file = model.file.file.extension)
"thumbnail.#{model.file.file.extension}"
end
end
end
SystemStackError (stack level too deep):
actionpack (4.0.4) lib/action_dispatch/middleware/reloader.rb:70
class AttachmentUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/projects/#{model.attachable.project.to_param}/attachments/#{model.id}/#{model.digest}/"
end
version :large do
process resize_to_fit: [700, 700]
def full_filename (for_file = model.file.file)
"large#{File.extname(for_file)}"
end
end
version :thumbnail, from_version: :large do
process resize_to_fill: [250, 250]
def full_filename (for_file = model.file.file.extension)
"thumbnail#{File.extname(for_file)}"
end
end
end