[RUBY] Unterschiede zwischen den Methoden find, find_by und find_by_sql

Ich habe eine ähnliche Methode entwickelt, um das Erlernen von Schienen voranzutreiben, daher möchte ich sie zusammenfassen.

Was ist die Suchmethode?

Eine Methode zum Abrufen eines Datensatzes, indem die ID des angegebenen Modells als Argument festgelegt wird.

Zum Beispiel ↓↓↓

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>

Sie können sehen, dass wir den id1-Datensatz erhalten konnten.

Was ist die find_by-Methode?

Es ist eine Methode, die auch unter anderen Bedingungen als der ID des angegebenen Modells erhalten werden kann. (Natürlich können Sie auch nach ID suchen)

Wenn Sie sich beispielsweise den oben beschriebenen Datensatzinhalt ansehen, enthält die Textspalte den Wert "aaaaa". Ich würde das gerne bekommen.

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>

Sie geben die Textspalte als Argument an und suchen und erhalten den Datensatz, der den Wert "aaaaa" enthält.

Was ist die find_by_sql-Methode?

Eine Methode zum Abrufen und Abrufen von Daten mithilfe einer SQL-Anweisung. Wenn Sie den Datensatz von id1 erhalten


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

Die select-Anweisung wurde ausgegeben. Dieses Mal werde ich versuchen, den Datensatz zu erhalten, indem ich diese Anweisung einer Variablen zuweise.

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>]

Sie haben es erhalten! !!

Um ehrlich zu sein, ich habe kein Bild, wenn ich find_by_sql verwende, aber werde ich es in Zukunft verwenden? .. .. ..

Recommended Posts

Unterschiede zwischen den Methoden find, find_by und find_by_sql
[Rails] Unterschied zwischen find und find_by
[Rails] Verschiedene Unterschiede zwischen redirect_to und Render-Methode und Ausgabemethode der Render-Methode
Denken Sie über die Unterschiede zwischen Funktionen und Methoden nach (in Java)
Unterschiede zwischen IndexOutOfBoundsException und ArrayIndexOutOfBoundsException