【Rails入門】params使い方まとめ

こんにちは! フリーエンジニアの長瀬です。

みなさん、Railsの勉強はかどってますか?

paramsの使い方を理解すれば、Railsで値を送受信する方法についての理解が深まります。

この記事では、paramsの使い方について

・paramsとは
・link_toによる受け渡し
・formによる受け渡し

という基本的な内容から、

・ストロングパラメータとは
・配列として値を受け取る方法

といった応用的な内容についても解説していきます。

paramsとは

paramsとはRailsで送られてきた値を受け取るためのメソッドです。

送られてくる情報(リクエストパラメータ)は主に、getのクエリパラメータとPostでformを使って送信されるデータの2つです。

一度でもポストフォームを作成したことがある方はform_for,for_tag,form_withのメソッドに馴染みがあると思います。

基本的には

で値を受け取ることができます。

まだRailsでPostフォームを作成したことのないはこちらの記事を参考にしてみてください。
一通り自分で実行してみると、formメソッドに対する理解が深まります。

【永久保存版】Railsのform_for使い方(select, checkbox, etc.)
更新日 : 2019年4月16日
【Rails入門】form_tagの使い方まとめ
更新日 : 2019年5月20日

パラメータの受け渡し方法

下準備

それでは今回の説明で使うModel、View、Controllerを用意していきます。

コマンドプロンプトに以下のコードを入力してください。

[実行結果]

これで、hogesコントローラー、index、newアクションとカラムにnameとcontentを持つhogeモデルが作成されました。

それでは今回使用するデータを入れていきましょう。

rails consoleでコンソールを開いた後、以下のコードを入力してください。

これで、Hogeにデータを直接追加することができました。

準備ができましたので、今回作成したファイルに、コードを記述していきましょう。

link_toによる受け渡し

まずはさきほど作成したapp/views/hoges/index.html.erbを以下のように修正してください。

link_to "表示名","次のアクションへ遷移するパス(パラメーター)" で、パラメータを次のメソッドに渡すことができます。
今回はnewアクションの名前付きルートと、id=2を指定しています。

それでは、値を送信する準備は出来上がったので、次はそれを受ける側の設定をしていきましょう。

まずはapp/config/routes.rbのnewのURLに値を含められるように修正する必要があります。以下のように修正してください。

これで、newアクションにidの値を含められるようになります。

次に、newアクションにURL(リソース)から受け取った値を使用してhogeモデルからレコードを取り出してみましょう。

app/controllers/hoges_controller.rbを以下のように修正してください。

params[:id]で、index.html.erbからパスと一緒に送信された値を受け取っています。

それではビューで@hogeの内容を出力してみましょう。
app/views/hoges/new.html.erbを以下のように修正してください。

実際に確認してみましょう。
ルーティングは

になっているので、rails sでサーバーを起動した後

http://localhost:3000/hoges/index

(補足http://localhost:3000の箇所は各自の開発環境により読み替えてください。)

にアクセスしてください。

[実行結果] Screen Shot 2560-08-14 at 16.36.59

このように表示され、”データを表示”を押すとid:2が送信されて

Screen Shot 2560-08-14 at 16.37.39

rails consoleから二番目追加したレコードを取り出すことができました。

link_toについてもっと理解を深めたい方は合わせてこちらもお読みください。

【Rails入門】link_toの使い方とオプションをわかりやすく解説!
更新日 : 2019年5月20日

formメソッドによるパラメータの受け渡し

次はformメソッドを使って、postメソッドで入力フォームを作成してみましょう。

では、まずはapp/views/hoges/new.html.erbをform_メソッドを使って以下のようにコードを修正してください。

[form_withの場合] [form_forの場合]

Rails5.1からはform_tagform_forform_withに統合されたので、どちらも記載しておきました。
どちらを使っても結果は同じなので、どちらで実装しても構いません。

入力フォームが完成したので、次はルーティングを完成されましょう。
app/config/routes.rbを以下のように修正してください。

createアクションにhogesと名前付きルートをつけてあるのは、form_メソッドがモデルを推測した際にcreateをhoges_pathで探すためです。

これで、formメソッドでポストできるようになりました。

ここまでで、値を渡す方は完成したので次は受け取る側を完成させましょう。
値はpostメソッドでcreateアクションに送られるので、app/controlllers/hoges_controller.rbを以下のように修正してください。

[app/controlllers/hoges_controller.rbの内容]

indexアクションには値がデータベースに保存されたかを確認するために、hogeテーブルの内容すべてを取得しています。

また、newアクションではデータを入力するためにレコードを新しく追加しています。

さて、肝心なのはcreateアクションの内容です。

問題はparams[:カラムの値]を用いてどうやって値を受け取っているかということです。

見たところ、直接そのような記述を見つけることができません。

ですが、

の部分でparams[:カラムの値]で値を受け取っています。

直接にparams[:カラムの値]とならないのは、Railsがストロンパラメータという値を安全に受け取る仕組みを採用しているからです。

ストロングパラメータについては後半に説明しますが、心の隅に置いておいてください。

createアクションに値を受け取る設定ができたので、次はさきほど使用したapp/views/hoges/index.html.erbを以下のように修正してください。

index.html.erbでは取得した@hogesの中身を全て出力しています。

これで、すべての準備ができました。

さきほど同様に、rails sでサーバーを起動した後

http://localhost:3000/hoges/index

(補足http://localhost:3000の箇所は各自の開発環境により読み替えてください。)

にアクセスしてください。

[実行結果] Screen Shot 2560-08-14 at 18.20.39

では”データを追加”を押してください。

Screen Shot 2560-08-14 at 16.50.55

今回はこのように入力します。
そして、入力できたら、送信を押します。

Screen Shot 2560-08-14 at 16.52.24

このようにデータの追加に成功しました。

しっかりとformメソッドで送信したパラメーターの送受信ができています。

ストロングパラメータを使う方法

ストロングパラメータとは

ストロングパラメータはコントローラーで送られてきたパラメータを安全に受け取るための仕組みです。

さきほどの

この部分がストロングパラメータで受け取る仕組みになっています。

requireとは必要とするで、permitは許可をするという意味です。

なので、params[:hoge][:name]やparams[:hoge][:content]は受け入れられても、params[:name]やparams[:content]は受け入れられません。

というのも、requireで:hogeを要求しているからです。

そして、たとえ:hogeを含んでいたとしても、params[:hoge][:email]やparams[:hoge][:address]は受け入れられません。
というのも、permitで許可されていないからです。

このように、ストロングパラメータは受け取る値に制限をかけているのです。

でもなぜ、そもそも値を制限しておく必要があるのでしょうか?

それはMass Assignmentと呼ばれるセキュリティー上の問題があるからです。

たとえば、データベース上でユーザーが管理者かどうかtrue/falseで設定されているとします。

ストロングパラメータを使わずになんでも値を受け入れてしまったら、管理者権限をtrueとして値を送信すれば、誰でも管理者になることができてしまうわけです。

これがMass Assignment脆弱性で、Railsの場合はストロングパラメータでこの問題を解消しているのです。

配列として値を受け取る方法

配列として受け取る方法についてはこちらの記事を参考にしてください。

複数のチェックボックスで取得した値を、配列として受け取る方法について、チュートリアル形式でまとめてありますので、一度トライしてみてください。

【Rails入門】checkboxの使い方まとめ
更新日 : 2019年5月3日

まとめ

いかがでしたでしょうか?

この記事では、paramsの使い方を解説しました。

link_toによるgetメソッド、formによるpostメソッドで値を受け取る方法がわかっていれば、基本はばっちりです。

ストロングパラメータについては、なぜそのような仕組みがあるのかを知っていればすらすらと頭に入ってくるはずです。

Railsでは値を受け取り保存する場合にはストロングパラメータを使用するので、必ず理解しておいてください。

もしparamsの使い方について忘れてしまったらこの記事を確認してくださいね!

未来に繋がるプログラミング学習、できていますか?

エンジニアと一口にいっても、フロントエンド、サーバーサイド、アプリ開発、AI関連など様々な業界や職種があり、業務内容や働き方、年収は変わります。

どんな働き方をしたいのか、どのくらい年収が欲しいのかなど具体的なキャリアパスを考えて、それを達成できる学習カリキュラムを考えていかないと、希望する方向性とは違うエンジニアになってしまったり、遠回りの学習に時間を費やしてしまう可能性があります。

侍エンジニア塾では目的から逆算する形で、まずあなたの目指すキャリアをヒアリングさせて頂いてからそれを達成するためのオリジナルの学習カリキュラムを作成しています。

今学んでいることが理想のエンジニアになるために繋がっているか不安でしたら、下記の無料体験レッスン予約カレンダーよりお気軽にご相談ください。

LINEで送る
Pocket

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説