LoginSignup
18
7

More than 5 years have passed since last update.

もそ、プログラミングを学ぶ【Ruby on Rails】〜first_or_initialize メソッドについて〜

Last updated at Posted at 2019-04-17

相変わらず理解が追いつかず、ターミナルに並ぶ表示に目を泳がせながらRuby on Railsを学習をしている もそ。
今日はWeb上のHTMLからある特定のデータを抜き出す処理、スクレイピングを覚えました。

個人的な気分としては、

▼ もそ は スクレイピング をおぼえた!
▼ もそ の レベルが 1 上がった!

みたいな感じなのですが、実際は全然まだスクレイピングを使いこなせていません...
そこで今回は、スクレイピングを行った際に登場するメソッドの一つについて書いていこうと思います。

first_or_initialize メソッドとは?

このメソッドは、レコードから情報を検索するwhereメソッドと一緒に使います。
まずwhereで検索した条件のレコードがあれば、そのレコードのインスタンスを返します。
もしもレコードがない場合は、インスタンスを新しく作ります。

言葉で説明すると少しわかりづらいので、コードと図を交えながら説明していきます。

user = User.where(nickname: "MOSO").first_or_initialize

たとえば上記のコードでは、whereメソッドを使ってnicknameが"MOSO"というユーザーを検索しています。

この検索結果によって、下の図のように処理が変わります。
どうなるかというと、
無題1142.jpeg

この「あるとき〜!」「ないとき〜...」の部分、関西人は某肉まんのCMのノリで読んでください。
おそらく関西人の皆さんの脳内では「551のほ〜うらいっ!」まで自動再生されるはずです。
...話がそれてしまいました。

ここで大事なのは、whereの検索結果によって情報を取得or新規作成をするという部分。
この処理を行わないと、スクレイピングをしたときに同じ情報(上記の例だとユーザー"MOSO”の情報ですね)がどんどん増えていってしまいます。
逆にこの処理をしてしまえば情報は重複せず、かつ新しい情報だったときは自動的にデータを追加してくれるというとても便利なメソッドです。

--
エラーを出して原因がわからん!と夫ポチにいうと、「はよワイに追いついて〜」とGitHubのレポジトリを送ってきやがりました...悔しい...。
果たしてポチに追いつける日は来るのか?もその学習は続く。

18
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
7