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さえあれば、データベースからリソースを探してクライアントにレスポンスできるので、パラメータが必要。
リクエストとはどういうときに発生しているのか?
- フォームを送信するとき
- リンクをクリックしたとき
- URLを直接ブラウザに入力したとき
- リダイレクトしたとき
フォームを送信するとき
フォームはView側でedit
やnew
画面などに作るであろうform_with
メソッドを使用したときに作られるもの。
なお、Controllerに渡す際はupdate
、create
、delete
などのアクションを使うときにform_wit
hでリソースの値を入れてデータ更新、作成、削除をする。
例:
<% = form_with(model: user, url user_path, local, true, method: :post) do | form | %>
HTTPメソッドはPATCH
、PUT
、DELETE
、POST
がある。
リンクをクリックしたとき
リンクなのでページを遷移するなどのイベントが発生する。
なお、ページ遷移先はhoge_path(hoge.id)
で、このhoge.id
がパラメータ。
例:
= link_to('クリックしてね', hoge_path(hoge.id), method: :patch, data { cnfirm: 'クリックしたよ' })
URLを直接ブラウザに入力したとき
ページを直接開く際もedit
やnew
、show
、delete
など、特定のリソースを取得する際にどのリソースを取ってくるか情報が必要になるため、パラメータを使ってサーバー側(Controller→Model)にレスポンスを要求しなければならない。
例:
https://qiita.com/drafts/exampleidhogefuga111/edit
このexampleidhogefuga111
がそう。
これでapp/controller/drafts_controller
にexampleidhogefuga111
を渡して、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]
が渡される。