新实例的回形针处理器

时间:2017-03-14 17:45:53

标签: ruby-on-rails paperclip

我在使用papperclip和自定义裁剪方面苦苦挣扎。

我正在使用lambda作为样式和自定义处理器,如下面的代码。 但是当我运行User.new(user_params)时,a.instanceUser的一个实例,但是为空,user_params没有传递任何值,例如width,{{1} }或top

保存后,数据就在那里,但裁剪不起作用,因为看起来paperclip忽略保存前的实例是什么。

left

我可以运行 has_attached_file :image, styles: lambda {|a| { croped: {processors: [:cropper], crop_w:a.instance.width, crop_x:a.instance.left, crop_y:a.instance.top} } }, default_url: "/images/:style/user.png", validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/ ,但这不是正确的方法,图像会被处理两次。

1 个答案:

答案 0 :(得分:1)

我有类似的问题。 Paperclip在分配时处理图像而不是保存,因此分配顺序很重要。如果您在image之前分配top,Paperclip会在您将image分配给用户后立即处理该图片,此时image.instance.top将为空top 1}}还没有被分配。

因此,您需要确保user_paramstop之前leftwidthimage。假设user_params返回ActionController::Paramters,您只需更改permit上的属性顺序,例如

params.require(:user).permit(:top, :left, :width, :image)

如果您不想依赖哈希顺序,也可以从参数中删除image并将其分别分配给用户实例。