2017-07-23 61 views
0

我试图用裁剪后的图像更新现有的用户头像。此外,控制器获取所有必需的参数(avatar_crop_x,avatar_crop_y,avatar_crop_w,avatar_crop_h)。我已经允许他们使用devise_parameter_sanitizer.permit(:account_update)方法。Devise + Carrierwave裁剪图像

Started PATCH "/users" for 127.0.0.1 at 2017-07-23 23:50:29 +0300 
Processing by Devise::RegistrationsController#update as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"n8ZQYS5iZXJs6V5eS4PfJKDeUhugasvXXIvIP+ZZIyLV4tukuqqjSvUA 
+DnZFZSF468eam1vSF8hD5STYmeA8Q==", "user"=>{"email"=>"[email protected]", "username"=>"admin", "first_name"=>"", 
              "last_name"=>"", "position"=>"", "city"=>"", "bio"=>"", 
              "avatar"=>#<ActionDispatch::Http::UploadedFile:0x007f82cb8f3860 
# @tempfile=#<Tempfile:/var/folders/2h/4k0zwm8s4j1dfq5_8zf7ttmr0000gn/T/RackMultipart20170723-11835-fia4di.jpg>, 
# @original_filename="gloomy-mountain-lake-hd-wallpaper.jpg", @content_type="image/jpeg", 
# @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"gloomy-mountain-lake-hd-wallpaper 
# .jpg\"\r\nContent-Type: image/jpeg\r\n">, "avatar_crop_x"=>"1266.6666666666665", "avatar_crop_y"=>"319 
# .9999999999999", "avatar_crop_w"=>"1280", "avatar_crop_h"=>"1280", "password"=>"[FILTERED]", 
# "password_confirmation"=>"[FILTERED]", "current_password"=>"[FILTERED]"}, "commit"=>"Update"} 

另外我在用户模型中有四个字段。

class User 
... 
attr_accessor :avatar_crop_x, :avatar_crop_y, :avatar_crop_w, :avatar_crop_h 
... 

但是在我的上传器中所有的model.avatar_crop_*字段都是零。

class AvatarUploader < BaseUploader 
    process :crop 

    version :thumb do 
    process resize_to_fill: [50, 50] 
    end 

    def crop 
    if model.avatar_crop_x.present? 
     manipulate! do |img| 
     w = model.avatar_crop_w.to_i 
     h = model.avatar_crop_h.to_i 

     # Set x-y coordinates of cropped image. 
     x = model.avatar_crop_x.to_i 
     y = model.avatar_crop_y.to_i 
     img.crop "#{w}x#{h}+#{x}+#{y}" 
     end 
    end 
    end 
end 

有没有人有同样的问题?请帮帮我。谢谢

+0

您能否添加更多有关裁剪方法的信息,以及如何向上传者发送':avatar_crop_x,:avatar_crop_y,:avatar_crop_w,:avatar_crop_h'? – Jeremie

+0

@Jeremie我使用cropper.js https://github.com/fengyuanchen/cropper而不是JCrop。当我将表单参数发送给Devise :: RegistarationController#update时,我的表单中有四个隐藏字段。你可以看到上面的日志。我不明白为什么模型在头像上传器中有没有值的字段。这个'model.avatar_crop_w'返回nil。 –

回答

0

请确保在设置之前,您已设置了裁剪参数。

对于如:

这不会使上传可用高度:

User.new(avatar: file, height: "10px")

这并不:你在哪里允许PARAMS

User.new(height: "10px", avatar: file)

检查顺序。

+0

是的,它的工作原理!谢谢。请你能解释为什么会发生? –

+0

上传者功能在分配发生时被调用。所以在第一种情况下,在分配'avatar'的时候,'height'没有被分配给'user'对象。 –