回答編集履歴

2

sessionのわかりやすい記事に追記

2020/07/17 09:50

投稿

shisha
shisha

スコア86

test CHANGED
@@ -26,6 +26,10 @@
26
26
 
27
27
  なお、Rubyでは、インスタンスメソッドでdef []=(key, val)という特殊なメソッドの定義の方法があります。
28
28
 
29
+ [Rails の session を完全に理解した - Qiita](https://qiita.com/zettaittenani/items/a75f0da8f44cfe0f85c0)
30
+
31
+ この記事を読んでもらえれば、sessionは、[]メソッドと[]=メソッドという特殊なメソッドを定義しているのが書かれています。
32
+
29
33
 
30
34
 
31
35
  >なぜ`["devise.regist_data"][:user]["password"]`では`[:user]`のみシンボルなのか

1

params, sessionをインスタンス変数と説明するのは正確ではないのではと思ったため、その部分を削除し編集しました。

2020/07/17 09:50

投稿

shisha
shisha

スコア86

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  paramsもsessionもRails特有の機能であり、(Railsのソースコードを全て見ない限り)Rubyで全てを直接理解することはできないと思います。
4
4
 
5
- 変数はclassメソッドを用い、そのクラスを確かめられます。
5
+
6
6
 
7
7
  ```ruby
8
8
 
@@ -16,13 +16,7 @@
16
16
 
17
17
  ```
18
18
 
19
-
20
-
21
- params は、ActionController::Parametersのインタンス変数です。
19
+ params, session がメソッドだとして、返り値がRubyにはないクラスである点に注意です。
22
-
23
- sessionは、ActionDispatch::Request::Sessionのインスタンス変数です。
24
-
25
-
26
20
 
27
21
 
28
22
 
@@ -30,7 +24,7 @@
30
24
 
31
25
  そう定義しているからです。
32
26
 
33
- なお、Rubyでは、def []=(key, val)という特殊なメソッドの定義の方法があります。
27
+ なお、Rubyでは、インスタンスメソッドでdef []=(key, val)という特殊なメソッドの定義の方法があります。
34
28
 
35
29
 
36
30
 
@@ -52,50 +46,4 @@
52
46
 
53
47
  sessionをメソッドだと説明しているところもあれば、特殊な変数と説明しているところもありますね。
54
48
 
55
- 自分も初心者なので誤っているかもしれませんが、[]= や []部分はメソッドの特殊な定義の仕方あってもparamsもsessionもインスタンス変数であってメソッドではないと思います。少なくともparamsやsessionをメソッドと説明するのは、初心者に対してとてもわかりにくいものだと思います。
49
+ ハッシュのよう変数振る舞をするので、少なくともparamsやsessionをメソッドと説明するのは、初心者に対してとてもわかりにくいものだと思います。
56
-
57
-
58
-
59
- 参考に、Rubyだけで、Railsのparamsぽいものを作ったコードを置いておきます。
60
-
61
-
62
-
63
- ```ruby
64
-
65
- class Parameter
66
-
67
-
68
-
69
- def initialize
70
-
71
- @params = {}
72
-
73
- end
74
-
75
-
76
-
77
- def []=(key, val)
78
-
79
- @params[key.to_s] = val
80
-
81
- end
82
-
83
-
84
-
85
- def [](key)
86
-
87
- @params[key.to_s]
88
-
89
- end
90
-
91
- end
92
-
93
-
94
-
95
- params = Parameter.new
96
-
97
- params[:suzuki] = "40"
98
-
99
- puts params["suzuki"]
100
-
101
- ```