2017-07-23 25 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'對象。 –