今日はpostmanを使っていたときに、paramsを数字で送ったはずが文字列になっていたので、それをIntegerに戻すやり方を書いておこうと思います。
まず、application_controllerで引数がintegerかどうか判別するメソッド(integer_string?)を定義しておきます。
Integer(str)のところでは引数がinteger型ではなかったときにAugumentErrorになります。それをrescueするといった形です。
application_controller.rb
def integer_string?(str)
Integer(str)
true
rescue ArgumentError
false
end
そしてControllerでparams(homework_params)という形で、string型となっている数字をinteger型に変換しています。
例) {"status"=>"3", "student_comment"=>"楽しかったです!"}から {"status"=>3, "student_comment"=>"楽しかったです!"}に変わる。
homeworks_controller
def update
@homework.update(params(homework_params))
end
private
def homework_params
params.permit(:student_comment, :status)
end
def params_int(homework_params)
homework_params.each do |key, value|
if integer_string?(value)
homework_params[key] = value.to_i
end
end
end
まとめ
以上になります。フォームから数字が送られてくると、勝手に文字列になってしまうので、そういうときにこの手法は使えそうだと思いました。
なぜか、postmanでも文字列で解釈されましたが・・