私は、自分のコンピュータからアップロードしたいプロフィール画像(carrierwave)を選ぶことができます。 Whatsapp(私はcarrierwave-crop-on-flyを使用)のように、1:1の正方形の縦横比が好きで、最後に切り取った画像はCloudinaryでクラウドにアップロードされ、モデル「user」の「image」列にバインドされます。 。私はcloudinary's tutorialに従って統合を行いましたCarrierwave Cloudly integration Ruby on Rails
ここまで私がこれまで行ってきたことは次のとおりです。ここでcloudinaryにバインドさアップローダーです:
ユーザーズモデルでclass AvatarUploader < CarrierWave::Uploader::Base
include Cloudinary::CarrierWave
include CarrierWave::MiniMagick
process crop: [100, 100]
def public_id
model.nombre
end
end
:
私はそのプロフィール写真を変更することができます私の見解ではclass User < ActiveRecord::Base
mount_uploader :image, AvatarUploader
...
:
.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"
...
(ときfile_field #cropboxが表示されます変更、すなわち画像が検査されるとき)
最後に、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:(
#<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"}}>
私は、同じ名前を持つ2つのparamsを推測することは問題である可能性がありますが、私はそれを動作させるためにそれを変更する方法がわからないと私はなぜ」期待されるハッシュを理解していませんハッシュを取得しました)」問題です