先日こちらのサイトで、find_by_sqlでのデータの取得について質問したところ
お陰様で「.first」を付けることで解決する事ができました。
その後理解を深めたく勉強中なのですが.firstの必要性がまだ理解できないので私の考え方の誤りをご指摘いただきたく思います。
以下、同じEventモデルのeventsレコードからいずれもid1のid番号を出力させるコードでして
class EventsController < ApplicationController def show @event = Event.find(1) @event1 = Event.find_by_sql( ['select * from events where id = ?', 1] ) end show.html.rb <p><%= @event.id %></p> <p><%= @event1.first.id %></p> #ブラウザにされるのは 1 1
もしくは
class EventsController < ApplicationController def show @event = Event.find(1) @event1 = Event.find_by_sql( ['select * from events where id = ?', 1] ).first #←ここに.first end show.html.rb <p><%= @event.id %></p> <p><%= @event1.id %></p> #ブラウザにされるのは 1 1
これで意図していることは解決できましたが、
疑問なのは
@event1 = Event.find_by_sql( ['select * from events where id = ?', 1] )
ここですでに[id1のレコード]と絞り込めているのになぜ.firstを指定しなければいけないのでしょうか。 という質問なんです。
自身で考えたこととして
(['select * from events where id = ?', 1])ではid1のeventsレコードに絞り込めたわけではない? だとするとこのコードは何を意味するのか。
または配列でfindした場合はたとえ一つに絞り込めていても.firstなどをつけないといけない?
といったところで理解しきれていないです。
本来はidがわかっている検索は@event = Event.find(1)でいいと思うのですが別件で導入したい事の参考サイトのなかで find_by_sql が出てきましてどうしても理解したいです。 [参考サイト] (https://qiita.com/SasakiYasai/items/b1352b3e46824b3844db)
初歩的かもしれませんがどうぞよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/30 10:30