2
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?

はじめに

どうも、Aliceです。最近Ruby on railsを勉強し始めたのですが、paramsというメソッドの理解にとても苦戦しました。
今回は、paramsについて、つらつらと書いていきます。
僕のように、railsを学び始めた方の理解に少しでも貢献出来たら嬉しいです。
(Githubのissueにメモしてたのをそのまま使ってるので文体とかおかしいかもだけど許して....)

paramsとは

一言で言うと : 「URLやフォームから送られてきたデータが入っている箱」のこと。
中身はRubyのハッシュである。

例)
/posts/2/edit にアクセスすると、Railsは:idの部分を読み取って

params[:id] # => 2 が自動で入る。

なぜハッシュになるか?

Railsのroutes.rbでこのように書くとする。

routes.rb
get "posts/:id/edit, to: "posts#edit

:idの部分が 「プレースホルダー」になり、URLの数字を取ってきてparamsに入れる。

つまり:

アクセスされたURL paramsの中身
/posts/1/edit { id: "1" }
/posts/100/edit { id: "100" }

コントローラーではこうなる

controller.rb
def edit
   @post = Post.find(params[:id])
end

params[:id] → "2"(文字列)
Post.find(2) → id = 2のレコードをDBから取り出す
③ それをビューで表示できるように@postに入れる。
 → ここでデータをDBから取り出し、edit.html.erbに渡す。

viewのlink_toに「id」が自動で入る理由

editページへのリンクを以下のように書くとする。

edit.html.erb
<%= link_to  "編集", edit_post_path(@post) %>

Railsが自動で

ruby.html.erb
/posts/2/edit

のように変換する。

裏側ではこのように処理されているらしい。

hoge.rb
edit_post_path(@post) # => "/posts/2/edit"

この2がparams[:id]に入る。

より具体的な流れ

① ブラウザで/posts/3/editにアクセス

② Railsがroutesを見て
・ コントローラー → posts
・ アクション → edit
・ params[:id] = "3"をセットする

③ コントローラーで

post_controller.rb
@post = Post.find(params[:id])

④ edit.html.erbに渡す

⑤ viewで <%= @post.title %>のように表示できる。

逆に、フォーム送信の時は?

ユーザからフォームが送られてくると、 paramsの中はもっと増える

[ブラウザ]
  title: "今日のごはん"
  body: "カレー"
       送信
[サーバ/Rails]
  params = {
    "post" => {
      "title" => "今日のごはん",
      "body" => "カレー"
    }
  }

よって cotrollerで

    params[:post][:title]
    params[:post][:body]

を取り出すことができる。

まとめ

paramsはどこから来たのか

どこから来たのか どんな値か 控え場所
URLの/:id id params[:id]
フォーム送信 入力データ params[:post][:title] など
クエリパラメータ ?search=curry params[:search]

多分、もっとしっかり理解しようとすると、HTTPについての知識やフォーム送信・POSTの仕組みの理解が必要になると思います。しかし、ここで理解しておくと、この後がぐっと楽になるので一緒に頑張りましょう!!!

それではまた~👋

2
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
2
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?