はじめに
こんちには、株式会社TOKOSの石津です!
今回はRailsでViewからControllerに値を渡す方法について説明していきます。
Webアプリケーションの開発において、フロントエンドとバックエンドの間でデータのやり取りを行うことはアプリケーションの動作の基本です。
特にRailsを使用する際、View(フロントエンド)からController(バックエンド)へのデータの受け渡しは頻繁に行われ、その方法やテクニックを熟知していると、開発効率やアプリケーションの品質が向上します。
この記事では、そんなRailsでのViewからControllerへのデータ受け渡しの基本的な手法から応用テクニックまで実際のコード例とともに詳しく解説します。
対象読者
- Railsを学び始めた初心者
- 学校やオンラインコースでWeb開発を学んでいる人や、独学でWeb技術を身につけようとしている人
- 他のプログラム言語やフレームワークからRailsへの移行を検討している、あるいはすでに移行を開始している人
フォームでhidden_fieldを使用する方法
Railsを用いた開発では、フォームの保存ボタンを押したタイミングでフォームの内容以外の情報をController側に送りたいこともあると思います。
そんな時はhidden_fieldが活用できます。
hidden_fieldはユーザーに見せたくないデータや、前のページから受け取ったデータを次のページに持ち越すときなどに使用されます。
View側の記述
<%= form_with model: @user, local: true do |f| %>
<%= f.hidden_field :token, value: @token %>
<%= f.label :name, "名前" %>
<%= f.text_field :name, placeholder: "名前を入力してください" %>
<%= f.submit "保存" %>
<% end %>
上記の例ではView側で使用している@tokenを画面には表示させずにController側に渡しています。
渡す値は変数ではなく””で囲った文字列や数字も渡すことができます。
Controller側の記述
フォームの保存を押されたタイミングでController側に値が渡ってきます。
取り出し方はフォームの通常のデータを取り出す時と同様です。
def create
@user_name = params[:user][:name]
@user_token = params[:user][:token]
# ...処理...
end
hidden_fieldで渡した値はその他のカラムと同様に格納されているので配列操作で取り出すことができます。
全く難しくないですね!
またController内にストロングパラメータを記述するやり方でも他のカラムと同等の扱いで使用できます。
フォームにurlに付け足す方法
フォームを用いてControllerに値を渡す方法は他にも存在します。
フォームに記述するurlに値を事前渡しておく方法です。
hidden_fieldを使いたくない場合や、渡したい値を格納する場所を変更する場合に使います。
View側の記述
<%= form_with model: @user, url: user_path(token: @token), local: true do |f| %>
# ...フォーム...
<% end %>
上記の例ではView側でhidden_fieldを使わずにController側にtokenとして@tokenを渡しています。
tokenとしているところは他の命名に変更できるので用途に応じて変更してください。
Controller側の記述
hidden_fieldの場合と同様にフォームの保存を押されたタイミングでController側に値が渡ってきます。
取り出し方は以下の通りです。
def create
@user_token = params[:token]
# ...処理...
end
hidden_fieldでは[:user]の中にtokenが格納されていましたが今回はparamsの中に直接格納されているのでparams[:token]で取り出すことができます。
デメリットとしては[:user]の中に格納されないのでストロングパラメータを通すことができません。
ストロングパラメータを利用したい場合はhidden_fieldを用いることをお勧めします。
link_toにurlに付け足す方法
削除ボタンや画面遷移などで使われることが多いlink_toではボタンが押された場合にController側に値を渡したいことも多いと思います。
フォームでも利用しましたがurlに値を渡す方法はlink_toにも利用することができます。
View側の記述
<%= link_to "ユーザー作成", new_user_path(token: @token) %>
フォームの場合と同様にurlに渡すことによってViewからController側に値を渡すことができます。
Controller側の記述
def new
@user_token = params[:token]
# ...処理...
end
取り出す時も同様でparamsの中に値が格納されているのでparams[:token]とすることでController側で値を取り出すことができます。
おわりに
今回の記事ではRailsでViewからControllerに値を渡す方法を説明しました。
hidden_fieldを使って渡す方法とurlに渡す方法の二つを解説しました。
セキュリティなど使用用途に応じて使い分けてみてください!