0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ruby on RailsAdvent Calendar 2023

Day 12

Rails パラメータを直接使って四則演算する際の注意点と解決策

Posted at

※この記事は僕がぶち当たった問題をとりあえずChatGPTくんに丸投げしてライティングしてもらったものです。

はじめに

Railsアプリケーションを開発する際に、パラメータの処理は非常に重要です。
しかし、パラメータはデフォルトで文字列として扱われるため、予期せぬ結果が生じることがあります。
本記事では、その中でも掛け算の処理に焦点を当て、問題の理解と解決策について説明します。

パラメータの文字列扱いによる問題

Railsでは、リクエストパラメータはデフォルトで文字列として扱われます。例えば、以下のようなコントローラアクションがあるとします。

# app/controllers/products_controller.rb

class ProductsController < ApplicationController
  def calculate_price
    price = params[:price]
    result = price * 5
    render json: { result: result }
  end
end

このコードでは、リクエストで送信されたparams[:price]を5倍にしてresultに代入しています。しかし、これには問題があります。

問題の原因

params[:price]が文字列であるため、掛け算を行うと文字列の連結が行われ、期待した結果が得られません。
たとえば、params[:price]が"10"だった場合、"10" * 5は"1010101010"となり、意図しない結果となります。

解決策

この問題を回避するためには、params[:price]を適切な型に変換する必要があります。
具体的には、整数型に変換することで文字列の掛け算問題を回避できます。

# app/controllers/products_controller.rb

class ProductsController < ApplicationController
  def calculate_price
    price = params[:price].to_i
    result = price * 5
    render json: { result: result }
  end
end

こうすることで、params[:price]が文字列であっても整数に変換され、掛け算が正しく行われます。

まとめ

Railsでのパラメータ処理において、文字列として扱われることに注意が必要です。
特に数値演算などの操作を行う際には、適切な型に変換してから処理を行うことで、予期せぬバグを回避できます。
是非、開発の際にはこのポイントを意識してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?