回答編集履歴

1

追記

2017/10/24 02:01

投稿

chelsy7110
chelsy7110

スコア596

test CHANGED
@@ -15,3 +15,35 @@
15
15
  というのは、**Arrayクラスにtitleっていうメソッドなんてありません**というエラーです。
16
16
 
17
17
  titleって呼び出しているのは@stagesだから@stagesが配列になっているとわかります。
18
+
19
+
20
+
21
+ ###### 追記
22
+
23
+ ```ruby
24
+
25
+ a = Stage.find_by(id: 6)
26
+
27
+ ```
28
+
29
+ これだと```a```はStageモデルのインスタンスが返ってきます。ですので、```a.title```と呼び出すことが出来ます。```find_by```は```where```と```first```をあわせた様な物ですので、こう書き換えられます。
30
+
31
+ ```ruby
32
+
33
+ a = Stage.where(id: 6).first
34
+
35
+ ```
36
+
37
+ で、seenさんが使った
38
+
39
+ ```ruby
40
+
41
+ a = Stage.find_by_sql(['select * from stages where id = ?', 6])
42
+
43
+ ```
44
+
45
+ これですが、今回id=6のものが1つしか無いのでStageモデルが返ってくると思い込んでいますが、find_by_sqlでどのようなSQLが実行されるかによって返ってくる件数が違います。
46
+
47
+ ですので、find_by_sqlはどのような場合でも配列で返ってくるわけです。
48
+
49
+ ということはwhereと同じようにfirstをつけてやればいいわけです