flash
を理解する過程で、params
やsession
についても理解できたのでまとめ
長くなりそうだったので、1:params
、2:session
、3:flash
の3回に分けた
####【3部作リンク】
1:params(ここ)
2:session
3:flash
####【ページ内リンク】
0.環境
1.前提知識
2.利用例
3.ストロングパラメータ
4.結論
#0.環境
・AWS
・Rails 5.2.4.5
・ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
#1.前提知識
この2つは同義。よく考えたらRubyで勉強したハッシュの仕組みと何ら変わらなかった・・・
params[:id] = 2
params = { id: 2 }
・.html.erb
で値を利用したいときは<%= params[:id] %>
とすれば良い
・params
はlink_to
等で渡された値が一時的に入れられる
・値はlink_to
等で渡された場所でしか利用できない。
#2.利用例
##順序①:ルート指定
Rails.application.routes.draw do
resources :teams, only: [:index, :show]
end
##順序②:team_pathに「params[:id]=3」「params[:name]=名前」を渡す
<%= link_to "押す", team_path(3, name: "名前") %>
・link_to
は複数の値を指定することが可能
・これは<%= link_to "押す", team_path(id: 3, name: "名前") %>
を略した書き方。先頭キーは指定しない場合id
キーとなる
・これはつまり「params = { id: 3, name: "名前" }」が一時的に代入されたのと同義
###順序③:リンク「/teams/3」に表示させる
その1:<%= params[:name] %> <!--表示結果:名前-->
その2:<%= params[:id] %> <!--表示結果:3-->
その3:<% params = { id: 4 } %> <!--表示されない-->
その4:<%= params[:id] %> <!--表示結果:4-->
その5:<%= params[:key] %> <!--表示されない-->
・link_to
等によって値(というよりハッシュ?)が渡されたので表示できる。しかし他のページでいくら<%= params[:name] %>
と書いても表示できない
・「その2~4」のように、ページ内で値を書き換えることもできる
※「その5」でエラーとならず何も表示されない仕組み
1:Rubyはハッシュで存在しないキーを指定されるとnil("何も存在しない"の意)
を返す
2:つまり「その5」は<%= nil %>
を表示しろ、という意味
3:2の表示結果は「何も表示しない」
エラーではなく正しい表示結果としてこうなっていた
#3.ストロングパラメータ
<% @user = User.new %>
<%= form_with model: @user do |f| %>
<p><%= f.text_field :name %></p> <!--名前、と入力したとする-->
<p><%= f.text_field :email %></p> <!--Eメール、と入力したとする-->
<%= f.submit "登録" %>
<% end %>
ここではparams = { user: {name: "名前", email: "Eメール" } }
をcreateメソッドに渡している。これらの値を得るには以下の2通りの方法がある(勿論他にも沢山あると思うけど)。
その1:user = User.new(name: params[:user][:name], email: params[:user][:email])
その2:user = User.new(params.require(:user).permit(:name, :email))
・その2がストロングパラメータ。
・その1は、params
から該当する値を取り出している。なので「name」「email」以外のキーがあっても無視されるだけである。
・その2は、値を得る前に既にparams = { user: {name: 〇〇, email: 〇〇 } }
という箱が出来ており、そこに値をはめ込むイメージ。よって他のキーの値が来たら失敗する。
#4.結論
【params
の特徴】
link_to
等で渡された値が一時的に入れられるけど、値はその場所でしか利用できない。
・params
は値ではなくハッシュ!!!!!(←超重要)
ということはlink_to
やform_with
で渡される値も全部ハッシュ・・・?って考えに至ってからはsession
やflash
もすんなり理解できた(真偽は分からない)
というかこれRails分野じゃなくて殆どRubyの知識だけだな・・・。Rails未経験でRubyだけ勉強してるときはハッシュの存在意義って何だよって思ってたけど、めっちゃ便利じゃん・・・
とりあえず、params
など知らない言葉が出てきても、焦らずにまずは文法を読み解くことが大事だと思った。