回答編集履歴

1

追記

2019/08/13 03:38

投稿

asm
asm

スコア15147

test CHANGED
@@ -81,3 +81,137 @@
81
81
  infos = users.map{|user| user.user_info }
82
82
 
83
83
  ```
84
+
85
+
86
+
87
+ ----
88
+
89
+
90
+
91
+ **以下追記**
92
+
93
+
94
+
95
+ 普通、データベースには以下のように複数のレコードが保存されます。
96
+
97
+
98
+
99
+ 例: ユーザー毎のテストの得点
100
+
101
+ |id|name|score|
102
+
103
+ |:--|:--|--:|
104
+
105
+ |1|hoge|100|
106
+
107
+ |2|foo|50|
108
+
109
+ |3|bar|85|
110
+
111
+
112
+
113
+ これに対して、「コントローラーからモデルを呼び出したい」ときというのは大別して2パターン考えられます。
114
+
115
+ a. 全てのユーザーの**平均点**が欲しい
116
+
117
+ b. ある1人のユーザーの**得点**が欲しい
118
+
119
+
120
+
121
+ データベースに入ってる得点が実際の点数の10分の1だったとします。
122
+
123
+ (メソッドを作る理由を無理やり作っただけです。)
124
+
125
+
126
+
127
+ a. 平均点を計算するメソッドが欲しい場合
128
+
129
+ 注意: 大抵のものはRailsが用意しています。 [Rails tips: ActiveRecord count系機能の基本と応用(翻訳)
130
+
131
+ ](https://techracho.bpsinc.jp/hachi8833/2018_02_15/52296)
132
+
133
+
134
+
135
+ ```ruby
136
+
137
+ # user.rb
138
+
139
+ class User < ApplicationRecord
140
+
141
+ # クラスメソッド
142
+
143
+ def self.my_ave
144
+
145
+ User.average(:score) * 10.0
146
+
147
+ end
148
+
149
+ end
150
+
151
+
152
+
153
+ # controller.rb
154
+
155
+ def index
156
+
157
+ @average = User.my_ave
158
+
159
+ end
160
+
161
+ ```
162
+
163
+
164
+
165
+ b. ある1人のユーザーの**得点**が欲しい
166
+
167
+
168
+
169
+ ```ruby
170
+
171
+ # user.rb
172
+
173
+ class User < ApplicationRecord
174
+
175
+ # インスタンスメソッド
176
+
177
+ def get_score
178
+
179
+ score * 10
180
+
181
+ end
182
+
183
+ end
184
+
185
+
186
+
187
+ # users_controller.rb
188
+
189
+ class UsersController < ApplicationController
190
+
191
+ def show
192
+
193
+ user = User.find(params[:id])
194
+
195
+ @score = user.get_score
196
+
197
+ end
198
+
199
+ end
200
+
201
+
202
+
203
+ # params[:id]は routes.rbに
204
+
205
+ # get '/users/:id', to: 'users#show'
206
+
207
+ # や
208
+
209
+ # resources :users
210
+
211
+ # と
212
+
213
+ # 書いてある等の場合につかえます。
214
+
215
+ # そうでない場合は、なんらかの方法でデータベースを検索させる必要があります。
216
+
217
+ ```