未経験でITエンジニアになろうと日々学習中の私が、疑問に思ったことを記録していきます。
params[:id]
User.find(params[:id])
Railsのコードにこう書かれていても、最初はよく理解ができなかったためparamsとは何なのかを調べてみました。
paramsとは?
「paramsとは」をネットで調べると、
フォームなどによって送られてきた情報(パラメーター)を取得するメソッドのこと。
とでてきますが、これだけ読んでも「…で、結局何?」という感じでした。
簡単にいうと、
ユーザーから送られてきたデータが入っている箱のこと。
Railsでは、フォーム入力やURLに含まれる値など、ユーザーから送られた情報を params という「ハッシュ(後述)」で受け取ります。
パラメーターとは
パラメーターとは、ユーザーがリクエスト(フォーム入力やリンククリック、URLアクセスなど)を送るときに一緒に送られるデータのこと。
Railsではこのパラメーターを、params という箱で受け取るんですね。
ハッシュとは
「ハッシュ」は、キー(名前)と値(データ)をセットで管理できる仕組みのこと。
user = {
"name" => "suzuki",
"age" => 20
}
# 値を取り出す
user["name"] # => "suzuki"
user["age"] # => 20
「名前(キー)」を指定すれば対応する「データ(値)」を取り出せる。これがハッシュです。
params
# => {"id"=>"5", "keyword"=>"rails"}
params["id"] # => "5"
params["keyword"] # => "rails"
つまりRailsでは、
ユーザーが送ったデータをハッシュ形式にまとめて、params という箱に入れてくれるんです。
Amazonで例えると?
ここでイメージをもっと分かりやすくするために、Amazonの荷物に例えてみます。
- ・パラメーター = ユーザーが注文した商品
- ・params = その商品が入ったAmazonのダンボール箱
params のAmazon箱
┌───────────────────────┐
│ "id" → "5" │
│ "keyword" → "rails" │
│ "title" → "Ruby入門" │
│ "body" → "Rails楽しい!" │
└───────────────────────┘
Railsでは、欲しい商品を「ラベル(キー)」を使って取り出します。
params["id"] # => "5"
params["keyword"] # => "rails"
つまり、「Amazonの箱(params)の中から欲しい商品(パラメーター)をラベル指定して取り出す」 というイメージです。
パラメーターの種類をAmazonの箱で理解する
Railsで扱うパラメーターには、大きく分けて3種類あります。
全部を「Amazonの箱」にたとえて整理するとスッキリ理解できます。
- URLパラメーター = 住所ラベル
- クエリパラメーター = 箱の外の付箋メモ
- フォームパラメーター = 箱の中の商品
例1: URLパラメーター
URLパラメーターとは、URLの一部に埋め込まれたデータのこと。
Railsでは routes.rb の :id などで定義されます。
例:
URL: http://localhost:3000/articles/5
routes.rb: get "articles/:id" => "articles#show"
この場合 /5 が URLパラメーターで、Railsは自動的にこれを params[:id] として扱います。
Amazonで例えると
Amazonの荷物に例えると、URLパラメーター=住所ラベル。
送り先住所ラベルに「注文番号5」と書いてあるイメージです。
荷物(paramsの箱)が届いた時点で、ラベルを見れば「これは5番の注文だな」と分かります。
# params のAmazon箱
┌───────────────┐
│ "id" → "5" │ ← 住所ラベルに書いてあった情報
└───────────────┘
Railsのコードで取り出すとこうなります👇
def show
@article = Article.find(params[:id])
end
例2: クエリパラメーター
クエリパラメーターとは、URLの「?」以降に書かれたデータ のことです。
検索フォームなどでよく使われます。
例: http://localhost:3000/search?keyword=rails&sort=desc
この場合、?keyword=rails&sort=desc がクエリパラメーター。
Railsでは次のように params に入ります👇
params
# => {"keyword"=>"rails", "sort"=>"desc"}
Amazonで例えると
クエリパラメーターは、Amazonの箱の外側に貼られた付箋メモのようなものです。
「この荷物は “rails” で検索してね」
「並び順は desc でお願い」
といったメモが、箱の外にペタッと貼られていて、Railsがそれを読み取ってくれるイメージです。
# params のAmazon箱
┌───────────────────────┐
│ "keyword" → "rails" │ ← 箱の外に貼ってあったメモ
│ "sort" → "desc" │ ← 箱の外に貼ってあったメモ
└───────────────────────┘
Railsではこう取り出せます👇
def search
keyword = params[:keyword] # => "rails"
sort = params[:sort] # => "desc"
end
例3: フォームパラメーター
フォームパラメーターは、フォームで入力して送信されたデータ。
POSTリクエストとしてサーバーに届きます。
<form action="/articles" method="post">
<input type="text" name="title">
<input type="text" name="body">
<input type="submit">
</form>
これを送信すると、Rails側ではこんな風に受け取れます👇
params
# => {"title"=>"Ruby入門", "body"=>"Rails楽しい!"}
Amazonで例えると
フォームパラメーター = 箱の中の商品のこと。
「ユーザーが注文した商品そのもの(title と body)が箱の中に入っている」イメージです。
# params のAmazon箱
┌───────────────────────┐
│ "title" → "Ruby入門" │ ← 箱の中の商品
│ "body" → "Rails楽しい!" │ ← 箱の中の商品
└───────────────────────┘
ポイント整理
- ・paramsとは
- ユーザーから送られてきたデータが入っている「Amazonの箱」
- ・パラメーターとは
- ユーザーがリクエスト(URLアクセス、リンククリック、フォーム送信など)に含めて送るデータ
- ・ハッシュとは
- 「キー(ラベル)」と「値(中身)」をペアで管理できる仕組み
→ params もハッシュになっているので、ラベルで中身を取り出せる
- ・パラメーター3種類
-
URLパラメーター = 住所ラベル(注文番号など)
クエリパラメーター = 箱の外の付箋メモ(検索条件など)
フォームパラメーター = 箱の中の商品(ユーザー入力)
まとめ
どの種類のデータも、最終的には Rails が params という「箱」にまとめて渡してくれます。
あとはキー(ラベル)を指定して中身(値)を取り出すだけ。
👉「ユーザーが注文した商品を、RailsがparamsというAmazonの箱にまとめて届けてくれる」
これはRailsがリクエストを処理して、パラメーターをparamsにまとめてくれる仕組みです。
以上、未経験からプログラミングの勉強を初めて1週間ほどたって、Rails入門でつまづいたparamsについてまとめてみました。
ちょっとこの記事に時間をかけすぎている感が否めないですが、自分の理解を深めるためにも継続してアウトプットできたらと思います!