質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

482閲覧

CarrierWave で画像サイズを半分にしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/03/07 05:50

編集2019/03/07 06:46

前提・実現したいこと

Rails の CarrierWave というジェムで画像アップロード機能をついけているのですが
画像サイズの取得とアップロードした画像のサイズを半分にしたものを追加したいです

発生している問題・エラーメッセージ

モデルから
mount_uploader :profile_image, UserUploader
で呼び出している uploader/user_uploader.rb に下記のコードを追加したところ

コントローラー内の

@user = User.new(user_params)

の行で

wrong number of arguments (0 for 2)

というエラーメッセージが発生しました。

エラーメッセージの内容と変更箇所の因果関係がよくわからず何がおこっているのでしょうか

該当のソースコード

ruby

1 # サイズを半分にしたものを生成してそのサイズを保存する 2 process :store_dimensions 3 4 version :half do 5 process :resize_to_fit => @resize 6 end 7 8 def store_dimensions 9 puts 'store_dimensions @ H1ImageUploader' 10 if file && model 11 puts file.file 12 @resize = MiniMagick::Image.open(file.file).dimensions 13 @resize[0] = @resize[0] / 2 14 @resize[1] = @resize[1] / 2 15 model.image_size = JSON.generate({width: @resize[0], height: @resize[1]}) 16 end 17 end

試したこと

https://stackoverflow.com/questions/20522375/wrong-number-of-arguments-for-model-new

同じような症状の報告があったのですが
当然 new メソッドをオーバーライドはしていません
他になにか new の中で使われるオーバーライドしてはいけないメソッド名があったりするのでしょうか

補足情報(FW/ツールのバージョンなど)

rails (= 4.2.3)
carrierwave (1.2.3)
carrierwave-aws (1.3.0)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

どうも carrierwave の中で出たエラーは全部
@user = User.new(user_params) で出たエラーと表示されるようです

肝心のエラー内容は
process :resize_to_fit => @resize
の部分が静的にきまってしまうみたいで @resize がモデルが作成されたときの値で空になってしまうため
本来2つ引数が必要な resize_to_fit に引数がわたらず該当のエラーになるようです

version :half do process :resize end def resize Util.log 'resize' resize_to_fit model.resize[0], model.resize[1] end

こんな感じで引数をメソッド内で指定してわたしたところうまく実現できました

投稿2019/03/08 11:47

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

@user = User.new(user_params)

このコードはuploader/user_uploader.rbではなくて

POSTで受け取るコントローラー側に書くものではないでしょうか。
createなりのメソッドで@user = User.new(user_params)かと思われます。
Railsのバージョンが書いていないので推測ですが、Rails5のStrong Parametersによる

wrong number of arguments

によるものではないでしょうか。(パラメーター数に合わせていない。)

投稿2019/03/07 06:29

yut148

総合スコア752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/07 07:20 編集

すみません そのあたりは scaffold で生成したデフォルトから変更していないので省略してしまったのですが @user = User.new(user_params) はコントローラー内のコードです なので因果関係がよくわからず困っています 変更したのはマイグレーションで image_size カラムを追加したことと uploader/user_uploader.rb の該当箇所のみで この部分を戻すと動作も正常に戻ります バージョンを追記しました
yut148

2019/03/07 07:46 編集

補足ありがとうございます。 >rails (= 4.2.3) ではStrong Parametersは関係なさそうですね。 app/models/user.rbは当然Uploadと紐付けているわけですよね?
退会済みユーザー

退会済みユーザー

2019/03/07 08:55

モデル内に mount_uploader :profile_image, UserUploader と記載してあります 追加したコードを消せばアップロードも動いています
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問