0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsの【params】を自分なりに噛み砕いた(3部作その1)

Last updated at Posted at 2021-03-16

flashを理解する過程で、paramssessionについても理解できたのでまとめ
長くなりそうだったので、1:params2:session3: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で勉強したハッシュの仕組みと何ら変わらなかった・・・

example.rb
params[:id] = 2
params = { id: 2 }

.html.erbで値を利用したいときは<%= params[:id] %>とすれば良い
paramslink_to等で渡された値が一時的に入れられる
・値はlink_to等で渡された場所でしか利用できない。

ページ内リンクへ戻る

#2.利用例
##順序①:ルート指定

routes.rb
Rails.application.routes.draw do
  resources :teams, only: [:index, :show]
end

##順序②:team_pathに「params[:id]=3」「params[:name]=名前」を渡す

index.html.erb
<%= link_to "押す", team_path(3, name: "名前") %>

link_toは複数の値を指定することが可能
・これは<%= link_to "押す", team_path(id: 3, name: "名前") %>を略した書き方。先頭キーは指定しない場合idキーとなる
・これはつまり「params = { id: 3, name: "名前" }」が一時的に代入されたのと同義

###順序③:リンク「/teams/3」に表示させる

show.html.erb
その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.ストロングパラメータ

new.html.erb
<% @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通りの方法がある(勿論他にも沢山あると思うけど)。

users_controller.rb
その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_toform_withで渡される値も全部ハッシュ・・・?って考えに至ってからはsessionflashもすんなり理解できた(真偽は分からない)
 というかこれRails分野じゃなくて殆どRubyの知識だけだな・・・。Rails未経験でRubyだけ勉強してるときはハッシュの存在意義って何だよって思ってたけど、めっちゃ便利じゃん・・・
 とりあえず、paramsなど知らない言葉が出てきても、焦らずにまずは文法を読み解くことが大事だと思った。

ページ内リンクへ戻る

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?