[RUBY] Différences entre les méthodes find, find_by, find_by_sql

J'ai mis au point une méthode similaire pour faire progresser l'apprentissage des rails, je voudrais donc la résumer.

Quelle est la méthode de recherche?

Une méthode` pour obtenir un enregistrement en définissant ʻid du modèle spécifié comme argument.

Par exemple ↓↓↓

pry(main)> Tweet.find(1)
   (0.4ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
  Tweet Load (0.3ms)  SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`id` = 1 LIMIT 1
=> #<Tweet:0x00007fa3fd3800d8
 id: 1,
 text: "aaaaa",
 image: "",
 created_at: Mon, 13 Jul 2020 06:42:56 UTC +00:00,
 updated_at: Mon, 13 Jul 2020 06:42:56 UTC +00:00,
 user_id: 1>

Vous pouvez voir que nous avons pu obtenir l'enregistrement id1.

Quelle est la méthode find_by?

C'est une méthode »qui peut être obtenue même dans des conditions autres que« id du modèle spécifié. (Bien sûr, vous pouvez également rechercher par identifiant)

Par exemple, si vous regardez le contenu de l'enregistrement décrit ci-dessus, la colonne de texte contient la valeur «aaaaa». J'aimerais avoir ceci.

pry(main)> Tweet.find_by(text: "aaaaa")
  Tweet Load (0.4ms)  SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`text` = 'dv sdvdfsv' LIMIT 1
=> #<Tweet:0x00007fa3db12bd90
 id: 1,
 text: "aaaaa",
 image: "",
 created_at: Mon, 13 Jul 2020 06:42:56 UTC +00:00,
 updated_at: Mon, 13 Jul 2020 06:42:56 UTC +00:00,
 user_id: 1>

Vous spécifiez la colonne de texte comme argument et recherchez et obtenez l'enregistrement qui contient la valeur "aaaaa".

Quelle est la méthode find_by_sql?

Une méthode utilisée pour récupérer et récupérer des données à l'aide d'une «instruction SQL». Lorsque vous obtenez l'enregistrement de id1


SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`id` = 1

La déclaration select a été émise. Cette fois, je vais essayer d'obtenir l'enregistrement en attribuant cette instruction à une variable.

pry(main)> query = "SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`id` = 1"
=> "SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`id` = 1"
[9] pry(main)> Tweet.find_by_sql(query)
  Tweet Load (0.3ms)  SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`id` = 1
=> [#<Tweet:0x00007fa3bc0e36e0
  id: 1,
  text: "aaaaa",
  image: "",
  created_at: Mon, 13 Jul 2020 06:42:56 UTC +00:00,
  updated_at: Mon, 13 Jul 2020 06:42:56 UTC +00:00,
  user_id: 1>]

Vous l'avez obtenu! !!

Pour être honnête, je n'ai pas d'image lors de l'utilisation de find_by_sql, mais est-ce que je vais l'utiliser à l'avenir? .. .. ..

Recommended Posts

Différences entre les méthodes find, find_by, find_by_sql
[Rails] Différence entre find et find_by
[Rails] Différentes différences entre redirect_to et méthode de rendu et méthode de sortie de la méthode de rendu
Pensez aux différences entre les fonctions et les méthodes (en Java)
Différences entre IndexOutOfBoundsException et ArrayIndexOutOfBoundsException