ご存知だと思いますが、RailsはRubyで作られています。
paramsもsessionもRails特有の機能であり、(Railsのソースコードを全て見ない限り)Rubyで全てを直接理解することはできないと思います。
ruby
1[1, 2].class #=> Array
2"hoge".class #=> String
3params.class #=> ActionController::Parameters
4session.class #=> ActionDispatch::Request::Session
params, session がメソッドだとして、返り値がRubyにはないクラスである点に注意です。
なぜsessionでは[] + 文字列で値を取得できるのか?
そう定義しているからです。
なお、Rubyでは、インスタンスメソッドでdef []=(key, val)という特殊なメソッドの定義の方法があります。
Rails の session を完全に理解した - Qiita
この記事を読んでもらえれば、sessionは、[]メソッドと[]=メソッドという特殊なメソッドを定義しているのが書かれています。
なぜ["devise.regist_data"][:user]["password"]
では[:user]
のみシンボルなのか
まず、基本的にparamsもsessionも、シンボルでも文字列でも同じものが取れるはようにRailsで作られています。しかし、シンボルに.(ピリオド)が使えないので、今回は:devise.regist_dataとは書けないです。
次に、{user: @user.attributes}
はRubyからあるHashと呼ばれるものです。Hashは、keyの部分で文字列とシンボルを区別します。:userと"user"を区別するので、今回は:userしか書けません。
params[:user][:password]
はなぜ両方ともシンボルなのか
paramsは、文字列とシンボルを区別しないので、"user"としても:userとしてもどちらでも取れるはずです。書いた人に聞かないとわからないですが、深い意味はないかと思います。シンボルの方がスッキリ書けて使っている人も多く、あえて文字列にする必要がなかっただけだと思います。
paramsはメソッドではああるが引数に()括弧をなぜ使用しないのか
sessionをメソッドだと説明しているところもあれば、特殊な変数と説明しているところもありますね。
ハッシュのような変数の振る舞いをするので、少なくともparamsやsessionをメソッドと説明するのは、初心者に対してとてもわかりにくいものだと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/17 13:55