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?

Railsのparamsとは

Last updated at Posted at 2024-08-22

paramsとは

paramsとはリクエストが発生した際にroutes、Controllerに渡されるパラメータ。

params[:id]などで、Viewからroutesを通り、Controller側に渡される。
なお、config/routes.rbでは、このように書かれている。

get 'users/:id/articles', to: 'articles#show', as: 'user_articles'

これの:idがそう。
Controllerにはparams[:id]と書いてidを取得できる。

リクエストとは

リクエストはクライアント側がサーバー側に何かこれがほしいと要求をしサーバー側がそれに対してレスポンスをするときに発生しているあれ。

レスポンスをするということはクライアントが何のリソースが欲しいかを特定する必要がある。
なので、クライアント側が特定をするための最低限の情報を渡さなければならない。

最低限の情報とは、例えばデータベースで言うとidだったり、user_idだったり。

idさえあれば、データベースからリソースを探してクライアントにレスポンスできるので、パラメータが必要。

リクエストとはどういうときに発生しているのか?

  1. フォームを送信するとき
  2. リンクをクリックしたとき
  3. URLを直接ブラウザに入力したとき
  4. リダイレクトしたとき

フォームを送信するとき

フォームはView側でeditnew画面などに作るであろうform_withメソッドを使用したときに作られるもの。
なお、Controllerに渡す際はupdatecreatedeleteなどのアクションを使うときにform_withでリソースの値を入れてデータ更新、作成、削除をする。

例:

<% = form_with(model: user, url user_path, local, true, method: :post) do | form | %>

HTTPメソッドはPATCHPUTDELETEPOSTがある。

リンクをクリックしたとき

リンクなのでページを遷移するなどのイベントが発生する。
なお、ページ遷移先はhoge_path(hoge.id)で、このhoge.idがパラメータ。

例:

= link_to('クリックしてね', hoge_path(hoge.id), method: :patch, data { cnfirm: 'クリックしたよ' })

URLを直接ブラウザに入力したとき

ページを直接開く際もeditnewshowdeleteなど、特定のリソースを取得する際にどのリソースを取ってくるか情報が必要になるため、パラメータを使ってサーバー側(Controller→Model)にレスポンスを要求しなければならない。

例:

https://qiita.com/drafts/exampleidhogefuga111/edit

このexampleidhogefuga111がそう。
これでapp/controller/drafts_controllerexampleidhogefuga111を渡して、Controllerでparams[:id]と書くと、paramsにexampleidhogefuga111が入っている。
Controllerでは

def edit
  article = Article.find(`exampleidhogefuga111`)
  
  コードが続く
end

などでリソースをとってきているだろう。

リダイレクトをしたとき

= redirect_to user_path(@user, foo: 'bar', baz: 'qux'), notice: 'ユーザーだよ'

routesでのパラメータ

routesでのルートの定義の方法は2種類
resourcesを使うときと、直接URLを書くとき

resourcesを使うときはこう書く

resources :users, only: %i[new create show] do
  resources :user_images, only: :index
end

このとき、例えば、ページを開くときにリソースが必要だなっていうときはshowのとき
URLはこうなる

GET 'users/:id/user_images' to: 'users/user_images#show' as users_user_images_show_path

これの:idがそうで、リクエストが発生した際にはここを通って、Controller側にparams[:id]が渡される。

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?