1.9.3p194:003>Example.find_by_id(9)ExampleLoad(0.3ms) SELECT "examples".* FROM "examples" WHERE "examples"."id"=9 LIMIT 1nil1.9.3p194:004>Example.where(:id =>9).first
ExampleLoad(0.3ms) SELECT "examples".* FROM "examples" WHERE "examples"."id"=9 LIMIT 1nil
Donc ils ont les mêmes caractéristiques de performance à la base de données. Il peut y avoir une légère différence dans les Rails de code pour find_by_*_ vs where, mais j'imagine qu'sera négligeable par rapport à la requête.
Je crois que cette méthode renvoie une erreur si il ne peut pas trouver le subject_id, alors que les 2 options que je suis à la recherche de retour nul. Mise à jour de ma question à clarifier. J'ai mis à jour ma réponse en conséquence. Pour les mises à jour d'enregistrement: Rails 4 n'a pas de railler find_by_id: edgeguides.rubyonrails.org/...
Je préfère find_by que le nom est descriptive et vous obtenez l'objet, sans avoir à convoquer une deuxième fonction (c'est à dire first)
User.find(9)# returns User object. Throws exception when not found. User.find_by(id:9)# returns User object. Returns nil when not found. User.where(id:9).first # returns User object. Returns nil when not found.
Je préfère cela aussi, mais mon CTO est obsédé par la prise de rails magique, une expérience que possible. Comment le convaincre? il est très intelligent J'ai mis à jour la réponse à montrer la dernière méthode approuvée. Maintenant, 2e et 3e approches sont tout à fait semblables. Vous devriez être en mesure de convaincre 2ème approche est la meilleure.
Ils de générer à la fois la même instruction SQL:
Donc ils ont les mêmes caractéristiques de performance à la base de données. Il peut y avoir une légère différence dans les Rails de code pour
find_by_*_
vswhere
, mais j'imagine qu'sera négligeable par rapport à la requête.Edit: À la lumière de Ryan Bigg de commentaire ci-dessous, j'aurais à suggérer la seconde forme pour la compatibilité ascendante.
J'ai mis à jour ma réponse en conséquence.
Pour les mises à jour d'enregistrement: Rails 4 n'a pas de railler
find_by_id
: edgeguides.rubyonrails.org/...OriginalL'auteur Brandan
Je préfère
find_by
que le nom est descriptive et vous obtenez l'objet, sans avoir à convoquer une deuxième fonction (c'est à direfirst
)J'ai mis à jour la réponse à montrer la dernière méthode approuvée. Maintenant, 2e et 3e approches sont tout à fait semblables. Vous devriez être en mesure de convaincre 2ème approche est la meilleure.
OriginalL'auteur Harish Shetty