回答編集履歴

1

追記

2020/07/19 17:38

投稿

web_inago
web_inago

スコア74

test CHANGED
@@ -1 +1,95 @@
1
1
  パーシャルではuserが何なのかわからないので@userがuserですと教えています
2
+
3
+
4
+
5
+ ##追記
6
+
7
+
8
+
9
+ **>なぜパーシャルだけはuserが何かわからないんですか?**
10
+
11
+ userという変数はどこにも定義されていないからです。
12
+
13
+
14
+
15
+ **>それならパーシャルは@userのことはわかるみたい何ですが**
16
+
17
+ **>パーシャルは何がわからなくて何がわかるんですか?**
18
+
19
+ 定義され、受け渡されている変数だけがわかる(扱えます)
20
+
21
+
22
+
23
+ @userはインスタンス変数なので、controllerからテンプレートへ渡っています。
24
+
25
+ なのでこれはパーシャルからも扱えます。
26
+
27
+ userはローカル変数なので、それが何なのかを示してあげないといけません。
28
+
29
+
30
+
31
+ なぜパーシャルからもインスタンス変数を参照できるのにわざわざローカル変数に代入しているのか説明します
32
+
33
+
34
+
35
+ ```users
36
+
37
+ <% @users.each do |user| %>
38
+
39
+ <%= user.name %>
40
+
41
+ <% end %>
42
+
43
+ ```
44
+
45
+ 上記のようにインスタンス変数をパーシャルで扱ってしまうと、
46
+
47
+ 同じ表示で、値だけ@postsを参照したものを実装したい時に
48
+
49
+ ```posts
50
+
51
+ <% @posts.each do |post| %>
52
+
53
+ <%= post.name %>
54
+
55
+ <% end %>
56
+
57
+ ```
58
+
59
+ 上記のような@posts専用のパーシャルをもう一つ作る必要があります。
60
+
61
+ これではパーシャルにして使いまわしをする、ということができず、
62
+
63
+ 単純にコードをファイル分割しただけになります。
64
+
65
+
66
+
67
+ そこで以下のようにパーシャルではインスタンス変数ではなくローカル変数を参照するようにすると、
68
+
69
+
70
+
71
+ ```index
72
+
73
+ <% items.each do |item| %>
74
+
75
+ <%= item.name %>
76
+
77
+ <% end %>
78
+
79
+ ```
80
+
81
+ @usersを扱いたい時も、@postsを扱いたい時も、@animalsを扱いたい時も、
82
+
83
+ パーシャルの記述はそのままで、
84
+
85
+ render時に
86
+
87
+ ```ここに言語を入力
88
+
89
+ <%= render 'index', items: @posts %>
90
+
91
+ <%= render 'index', items: @users %>
92
+
93
+ ```
94
+
95
+ として、ローカル変数に扱いたいインスタンス変数を代入するだけで一つのパーシャルを使いまわせます。