Ich habe zwei Modelle Benutzer und Buch. Benutzer haben Benutzername und E-Mail-Feld, Buch haben Autor und Titelfeld. Wenn ich verwende verbindet die Benutzer zu erhalten, basierend auf Daten, die mit übergeben Bedingungen in where-Klausel, erhalte ich unterschiedliche ErgebnisseWas ist der Unterschied zwischen der Übergabe eines Symbols und Zeichenfolge in Where-Klausel mit Joins
Als ich das laufen
User.joins(:books).where('author = ? ','xxxx')
Mysql-Abfrage generiert wird :
"SELECT `users`.* FROM `users` INNER JOIN `books` ON `books`.`user_id` = `users`.`id` WHERE (author = 'xxxxx')"
gibt mir den Benutzer, dessen Buch enthalten xxxx Autor während
Wenn ich laufen diese
User.joins(:books).where(author: 'xxxx')
Mysql-Abfrage generiert wird:
"SELECT `users`.* FROM `users` INNER JOIN `books` ON `books`.`user_id` = `users`.`id` WHERE `users`.`author` = 'xxxx'">
gibt mysql2 :: Fehler: Unbekannte Spalte ‚Benutzer. Autor 'in' wo Klausel ':
SELECT `users`.* FROM `users` INNER JOIN `books` ON `books`.`user_id` = `users`.`id` WHERE `users`.`author` = 'xxxx'
ActiveRecord :: StatementInvalid: Mysql2 :: Fehler: Unbekannte Spalte 'users.author' in 'Where-Klausel': SELECT users
. * Von users
INNER JOIN book
ON book
. user_id
= users
. id
WHERE users
. author
= ‚Dan Brown‘
Meine Frage: ist, wenn ich einen String verkapselt Feld und Wert am Übergang in where-Klausel gibt es mir führen, aber wenn ich pass ein Symbol in where-Klausel gibt es mir unbekannte Spalte Fehler MySQL. Also, woher weiß Ruby-Interpreter, woher Daten in Symbol Passing und String-Passing zu holen
Danke für die Antwort @Sravan. Aber meine Frage ist, wie Rails entscheiden, wenn String übergeben, um nach Autor in Buch-Tabelle zu suchen, während beim Übergeben von Symbol entscheidet, in Benutzern Tabelle – Gagan
zu suchen Ich aktualisierte meine Antwort bitte einmal überprüfen. – Sravan