前提・実現したいこと
Carrierwaveでユーザーのアイコン画像をアップロードする機能を実装しています。
下記はUploaderの設定ファイルです。
ruby
1class ImageUploader < CarrierWave::Uploader::Base 2 include CarrierWave::MiniMagick 3 storage :file 4 5 def store_dir 6 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 7 end 8 9 def default_url(*args) 10 "/images/fallback/" + [version_name, "default_icon.jpg"].compact.join('_') 11 end 12 13 version :icon_thumb do 14 process resize_to_fit: [200, 200] 15 end 16 ... 17end 18
下記はアップロードのアクションです。
ruby
1class UsersController < ApplicationController 2 def update_icon 3 user = User.find(params[:id]) 4 user.icon = params[:icon] 5 render json: user 6 end 7 ... 8end
このページ
の
ruby
1u = User.new 2u.avatar = params[:file] # このようにファイルを割り当てる
このコードを参考にアクションを設定しました。
上記のupdate_icon
アクションでレンダーされるJSONのiconのURLを、アップロードした画像のパスになるようにしたいです。
単にユーザー情報をGETすると、下記のJSONがレンダーされます。
json
1{ 2 "id": 1, 3 "name": "hoge", 4 "icon": { 5 "url": "/images/fallback/default_icon.jpg", 6 "icon_thumb": { 7 "url": "/images/fallback/icon_thumb_default_icon.jpg" 8 } 9 }, 10}
そのほかの環境
- Rails APIモード
- MiniMagick
発生している問題・エラーメッセージ
"#<ArgumentError: wrong number of arguments (given 4, expected 2)>"
試したこと
versionを設定せずupdate_iconアクションを実行したところ、iconのURLが更新されました。
json
1{ 2 "id": 1, 3 "name": "hoge", 4 "icon": { 5 "url": "/uploads/tmp/0000-000-000-000/hoge.jpg" 6 }, 7}
とはいえ、小さい画像も生成したいです。
あなたの回答
tips
プレビュー