【发布时间】:2014-05-26 01:57:54
【问题描述】:
我正在关注 Episode: 182-cropping-images 以裁剪用户个人资料图片。
AR 关系是用户有一个个人资料图像: 在用户模型中:
has_one :profile_image, :as => :imageable, :class_name => 'ProfileImage', :dependent => :destroy
在 ProfileImage 模型中:
class ProfileImage < Image
has_attached_file :data, :styles => {
:large => "160x160>",
:grid => "114x114>",
:medium => "80x80>",
:list => "60x60>",
:square => "32x32!",
:tiny => "20x20!",
:icon => "16x16!"
}, :processors => [:cropper]
attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
def cropping?
!crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
end
def avatar_geometry(style = :original)
@geometry ||= {}
@geometry[style] ||= Paperclip::Geometry.from_file(data.path(style))
end
在 lib/paperclip_processors/cropper.rb 库中:
module Paperclip
class Cropper < Thumbnail
def transformation_command
if crop_command
crop_command + super.join(' ').sub(/ -crop \S+/, '').split(' ')
else
super
end
end
def crop_command
target = @attachment.instance
if target.cropping?
["-crop", "#{target.crop_w}x#{target.crop_h}+#{target.crop_x}+#{target.crop_y}"]
end
end
end
end
以及所有其他内容,例如 Episode: 182-cropping-images with solution 现在,我收到错误:
NoMethodError Exception: super: no superclass method 'transformation_command' for Paperclip::Cropper
排队:
crop_command + super.join(' ').sub(/ -crop \S+/, '').split(' ')
如果我删除,+ super.join(' ').sub(/ -crop \S+/, '').split(' ')
它将所有图像样式裁剪为相同的高度宽度。请指导。
【问题讨论】:
-
一切看起来都正确。您是否考虑过在
def transformation_command方法中的if crop_command之前检查super可能返回/或工作的内容? -
@Surya,
crop_command返回正确的命令。但是super会返回标题中的错误。我通过 lib/paperclip_processors/cropper.rb lib 的调试器检查了它:就在crop_command + super.join(' ').sub(/ -crop \S+/, '').split(' ')之前 -
奇怪,我检查了 Paperclip 的 Thumbnail 类,
transformation_command存在那里。这就是为什么我问super是否在transformation_command方法中的if crop_command行之前返回数组。 -
这个周末我会尝试在我的机器上设置回形针。让我们看看我能不能让这个工作。 :)
-
这个错误只会发生(基于
Paperclip:: Thumbnail#transformation_command的来源,你的cropper.rb我被加载之后你的另一个Thumbnail被加载但是在 Paperclip gem 加载之前。因此,请检查您的加载路径/顺序,并确保您从正确的类派生。您可以通过以下方式进行测试:class Cropper < Paperclip::Thumbnail因为如果我的理论是正确的,您现在应该得到一个未初始化的常量错误。