LoginSignup
0
0

More than 1 year has passed since last update.

ruby on rails paramsまとめ〜後半〜

Last updated at Posted at 2021-07-21


この投稿では、ruby on railsのparamsのあれこれについてまとめます。
少しでも参考になったら幸いです。

paramsのまとめ前半を読まれていない方は、先に前半をご確認ください。

paramsの概念振り返り

早速、データ保存のparamsについて解説する前に、paramsの概念だけ再掲します。
復習の必要がない方は読み飛ばしてくださいね。

paramsとは、どの画面を表示するか指定したり、データを保存するために、
クライアントから送られるデータ郡です。
ruby on railsは、MVCモデルでデータを送受信するので、paramsがどこからどこに渡されているかを
MVCの図で表してみます。

次の章以降では、データを保存するためのparamsについて解説します。

params理解のための自作ミニアプリについて

解説を進める前に、解説に利用する自作ミニアプリの機能を事前に紹介します。
今回のサンプルアプリは、記事一覧表示、記事詳細表示、記事作成機能(タイトル・内容を入力)を簡易的に作成しています。

トップページからは、記事の新規作成ページに遷移できるようにしています。
新規作成ページでは、投稿を保存し、トップページに表示できるようにしています。

また、トップページの記事をクリックすると、記事の詳細を確認できるようにしています。

データ保存のためのparamsについて

この章ではデータ保存のためにparamsをどのように利用しているかを説明していきます。

トップページから遷移した先の新規作成ページでは、記事の新規投稿ができましたよね。


この動作では、記事の保存にparamsを利用しているので、詳しく解説していきます。
また、最初にお見せしたMVCの図に立ち返っていくと、paramsは送る側と受け取る側がいますよね。
そのため、分けて順に解説してきます。

paramsを送る

paramsは、新規投稿画面(new)からCreate Sampleをクリックすることでparamsを送っています。
コードを見ないと分からないので、早速お見せしようと思います。

いろいろ書いてありますが、今回はform.text_fieldと書いてある行を参照してください。
:titileと:contentが特に大切になります。
ここで、どのような名前でデータを送るかを決めています。

イメージしにくい方向けに、タイトルに「テスト」、本文に「てすとてすと」と入力した例を
図で表現してみます。

paramsという黄色の箱の中に、sampleという緑色の箱が、さらにtitle、contentという青色の箱が中に入っています。
図からは、3重の箱に入ってparamsが送られているとイメージしてもらえれば大丈夫です。

ここで初登場のsampleに関しても軽く触れておくと、form_withの「model:」となっている右横の変数が影響するものくらいで思ってもらえれば大丈夫です。

ここまでまとめます。
「Create Sample」をクリックしたとき、「タイトル」、「本文」の横の入力欄に入力された値がparamsは、3重の箱になっておくられます。

paramsを受け取る

コントローラーでどうやって受け取っているかを早速確認してみましょう。
rails sコマンドを実行したターミナルにparamsのログが表示されています。

「paramsを送る」で紹介したのと同様の例のparamsです。
Paramaters: {"sample=>{"title"=>"テスト", "content"=>"てすとてすと"}}となっており、paramsにsampleという箱が、さらにその中に「テスト」、「てすとてすと」が入っていることが確認できます。

paramsの送り方・受け取り方という面では、ここまでの説明で十分ですが、
paramsを使ってどうやって保存しているかも補足させていただきます。

受け取ったparamsを使う

こちらもコントローラーからどうやって保存の指示をmodel、DBに送っているかを
コードで早速確認してみます。

上の画像内のSample.createという部分に、paramsという文字が見当たりますね。
ざっくりお伝えすると、params[:sample][:tilte]で「テスト」という文字列にアクセスして、DBに送ることで保存しています。
paramsの右側の「titile:」って何?って方に向けてもう少しだけ補足します。
「titile:」はDBのテーブルの絡む構成に関係してくるので、テーブルがどうなっているかもお見せします。

idが3となっているデータが今回の例で保存したデータです。
図のように「title」が「テスト」、「content」が「てすとてすと」となっていますね。
このように保存して欲しいことをモデル、DBに伝えるためにSample.createではtitle: params[:sample][:title]と記述していたんです。
(「title」、「content」以外はデフォルトで用意されるカラムなので、今回は気にしなくて良いです。)

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