概要
仮作成したページで、フォームからPOSTされたデータが取得できることを確認する。
アクションの追加
フォームからのデータはPOSTメソッドで送られてくるので、これを受信してサインアップ/サインインの処理を行うアクションをコントローラーに追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class UsersController < ApplicationController def sign_up render layout: 'application_signed_out' end def sign_in render layout: 'application_signed_out' end def sign_up_process end def sign_in_process end end |
ルーティング
追加したアクションに対するルーティングを設定する。
1 2 3 4 5 6 7 8 9 |
Rails.application.routes.draw do get '/top', to: 'pages#top' get '/sign_up', to: 'users#sign_up' get '/sign_in', to: 'users#sign_in' post 'sign_up', to: 'users#sign_up_process' post 'sign_in', to: 'users#sign_in_process' end |
ルーティングの設定状況を確認すると、POSTメソッドに対するPrefixが設定されていない。
1 2 3 4 5 6 7 |
[vagrant@vagrant ex_bbs]$ rails routes Prefix Verb URI Pattern Controller#Action top GET /top(.:format) pages#top sign_up GET /sign_up(.:format) users#sign_up sign_in GET /sign_in(.:format) users#sign_in POST /sign_up(.:format) users#sign_up_process POST /sign_in(.:format) users#sign_in_process |
そこで、ルーティングにas:
でPrefixを設定する。
1 2 |
post 'sign_up', to: 'users#sign_up_process', as: :sign_up_process post 'sign_in', to: 'users#sign_in_process', as: :sign_in_process |
その結果POSTメソッドのルーティングにもPrefixが設定され、Prefix_path
の定型句でのURL指定が可能になった。
1 2 3 4 5 6 7 |
[vagrant@vagrant ex_bbs]$ rails routes Prefix Verb URI Pattern Controller#Action top GET /top(.:format) pages#top sign_up GET /sign_up(.:format) users#sign_up sign_in GET /sign_in(.:format) users#sign_in sign_up_process POST /sign_up(.:format) users#sign_up_process sign_in_process POST /sign_in(.:format) users#sign_in_process |
フォームのURL指定
サインアップ/サインインを扱うアクションへのルーティングが決まったので、フォームのアクションを設定する。
sign_up.html.erb
については以下の通り。
1 |
<%= form_with url: sign_up_process_path, local: true do |f| %> |
sign_in.html.erb
の方は以下の通り。
1 |
<%= form_with url: sign_in_path, local: true do |f| %> |
アクションのURL指定では、Prefix_path
の定型句を使っている。
パラメーターの確認
この状態でRailsサーバーを起動させて、サインアップページで何も入力せずにサインアップボタンを押す。
その処理結果をRailsサーバーのコンソールで確認すると、:name
、:email
、:password
が送られてきているのがわかる(:passwprdはフィルタリングされている)。
1 2 3 |
Started POST "/sign_up" for 10.0.2.2 at 2021-03-20 08:55:09 +0900 Processing by UsersController#sign_up_process as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"p7+MDA.....", "name"=>"", "email"=>"", "password"=>"[FILTERED]"} |
これらの値はparams変数でキーを指定して参照することができる。PHPの$_POSTと同じように、paramsもグローバル・スコープを持っている。
1 2 3 4 5 |
def sign_up_process puts params[:name] puts params[:email] puts params[:password] end |
ここでフォームに何か入力してサインアップボタンを押すと、以下のようにコンソールに入力内容が表示される。
params[:password]
を直接表示させるとパスワードが平文で見られることに注意。
1 2 3 4 5 6 |
Started POST "/sign_up" for 10.0.2.2 at 2021-03-20 08:56:41 +0900 Processing by UsersController#sign_up_process as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"p7+MDAkzfG7WRDlYjW/FG2JqLXwq76eCULpRZO1MO07rjaH6zEJeiQDeQPgdMS4wZO+Y6hGXsFHgiaoXih2FlA==", "name"=>"悟空", "email"=>"monkey@taustation.jp", "password"=>"[FILTERED]"} 悟空 monkey@taustation.jp monkey |