다음과 같이 작동하는 프로필 사진 업로드를하려고합니다. 사용자가 자신의 컴퓨터에서 업로드하려는 프로필 사진 (carrierwave)을 선택할 수 있습니다. 그는 Whatsapp (내가 사용하는 carrierwave-crop-on-fly)와 같이 1 : 1의 정사각형 비율로 좋아하며 마지막으로 자른 그림은 Cloudinary을 통해 클라우드에 업로드되고 내 모델 "사용자"의 "이미지"열에 바인드됩니다. . 나는 통합을 위해 cloudinary's tutorial을 따라 갔다.Carrierwave Cloudn 통합 Ruby on Rails
내가 지금까지했던 일이 여기에있다. 내가 그 프로필 그림을 변경할 수 있습니다 내보기에서
class User < ActiveRecord::Base
mount_uploader :image, AvatarUploader
...
: 사용자 모델에서
class AvatarUploader < CarrierWave::Uploader::Base
include Cloudinary::CarrierWave
include CarrierWave::MiniMagick
process crop: [100, 100]
def public_id
model.nombre
end
end
:
이.well
.row-fluid
.span8.offset2
%p
.inline-block
= form_for @user, method: :post, url: change_photo_self_url do |f|
= f.file_field :image
.hidden#cropbox= f.cropbox :image, width: 300, height: 300
= f.submit "Crop", class: "btn btn-success blanco"
...
(#cropbox 때 file_field를 나타납니다 여기에 cloudinary와 바인더 제본 업 로더입니다 변경, 즉 이미지 검사시)
마지막으로 users_controller
...
def change_photo
user = current_user
user.update_attributes(user_params)
sign_in(user)
redirect_to profile_url
end
private
def user_params
params.require(:user).permit(..., :image)
end
'자르기'작업 없이는 아무 문제없이 작동합니다. 즉, 사용자가 이미지를 업로드하고 모든 것이 잘 작동하도록 선택할 수 있다고 구현했습니다. 그러나 자르기를위한 컨트롤을 추가 할 때 충돌이 발생합니다. 내가 이미지를 선택하면, 자르기면 내가 완벽하게 선택할 수 있습니다 나타납니다,하지만 난 버튼을 제출 "자르기"를 클릭하면, 다음과 같은 오류도 컨트롤러의 액션에 도달하기 전에 트리거 다음 여기에
Rack::QueryParser::ParameterTypeError at /change_photo
expected Hash (got Hash) for param `image'
을 통화 PARAMS : (I는 같은 이름을 가진 두 개의 PARAMS를 추측 할 수있다
#<Rack::QueryParser::Params:0x396f9f0 @limit=65536, @size=5, @params={"image"=>{:filename=>"140.jpg", :type=>"image/jpeg", :name=>"user[image]", :tempfile=>#<Tempfile:C:/Users/josem/AppData/Local/Temp/RackMultipart20171229-7548-15105ol.jpg>, :head=>"Content-Disposition: form-data; name=\"user[image]\"; filename=\"140.jpg\"\r\nContent-Type: image/jpeg\r\n"}}>
는 문제가 될 수 있지만, 나는 그것이 작동하도록 변경하는 방법을 몰라 내가 왜 "예상 해시를 이해하지 못하는 해시있어) "문제가있다