【Rails】whereメソッド
※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。
【目次】
データベースの検索方法を調べていたら、こんな文言がありました。
find(:all)やfind(:all, :conditions ...)などの書き方が廃止になりました。whereなどを使うようにしてください。
今回はcurrent_userの情報を取り出したかっただけなので「find」でよかったのですが、「廃止」の文字を見てしまうと「where」が気になってしまい調べてみました。
メリット
whereメソッドは、データベースから条件に当てはまるレコードを全て取得する
whereメソッドで検索したデータを出力するには、eachメソッドなどで回す必要がある
内容
whereメソッドとは?
データベースから条件を指定し、条件に当てはまるレコードをすべて取得します。
whereメソッドの使い方
モデル.where(条件)
# SELECT "モデル".* FROM "モデル" WHERE 条件
whereメソッドの戻り値
戻り値はActiveRecord::Relationというオブジェクトになります。
なので、そのままではデータを表示することはできません。
データを出力する
whereメソッドの戻り値(ActiveRecord::Relation)は、簡単に言うとモデルの配列です。
データを出力させるには、必ずeachメソッド等で回す必要があります。
(例)
controller.rb
@user = User.where(id: current_user.id)
※条件を「params[:id]」にすると、「:id」番号までの全てのデータが読み込まれます
view.html.erb
<% @user.each do |user| %>
<%= user.nickname %>
<% end %>
表示回数に制限を持たせたい場合は、オプションを使用します。
(例)
controller.rb
@items = Item.where("name not ?", nil)
view.html.erb
<% @items.first(5).each do |item| %>
<%= item.nickname %>
<% end %>
最初の5つのデータを配列で出力します。
今後に向けて
ポートフォリオが思っていたように進まなくて焦りが出てきた。
転職活動も思っていないように進んでないし、不安の毎日ですが、自分を信じて進むしかないですね。
参考サイト
Active Record クエリインターフェイス - Rails ガイド