大田区から発信するゆるゆる日記

主にITエンジニアに関する備忘録日記。たまに趣味も。何か不備があればコメント頂けると幸いです。Twitterアカウント https://twitter.com/ryuzan03

【Rails】whereメソッド

※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。

【目次】

 

データベースの検索方法を調べていたら、こんな文言がありました。

find(:all)やfind(:all, :conditions ...)などの書き方が廃止になりました。whereなどを使うようにしてください。

find - リファレンス - - Railsドキュメント

今回は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 ガイド

find、find_by、whereなどモデルを取得する方法まとめ – Ruby on Rails 始めました

ActiveRecord の find と where の違い。 - Qiita