web-dev-qa-db-fra.com

La meilleure façon de trouver un seul enregistrement à l'aide d'ActiveRecord 3 / Arel?

Où je faisais ça:

Foo.find_by_bar('a-value')

Je peux maintenant faire ceci:

Foo.where(:bar => 'a-value').limit(1).first

Est-ce recommandé? Est-ce la meilleure façon? Dois-je continuer à utiliser l '"ancienne" méthode parce qu'elle continue d'être un sucre syntaxique utile, ou existe-t-il une meilleure façon de le faire maintenant, qui soutiendra le chaînage et toutes les autres bonnes choses?

36
John Bachir

Rails 4:

Foo.find_by bar: 'a_value' , wibble: 'a wibble value'
45
SureshCS

Je pense que la meilleure façon de retourner un seul enregistrement serait dans le sens de votre deuxième exemple, mais vous pouvez omettre la partie limite:

Foo.where(:bar => 'a-value').first

Cela suit la nouvelle syntaxe et prend en charge le chaînage si vous souhaitez ajouter plus de conditions à la recherche.

22
nmunson

Rails vous donne toute une série de méthodes magiques pour ce genre de chose:

Foo.find_by_bar('a-value')

Vous pouvez également utiliser plusieurs attributs:

Foo.find_by_bar_and_wibble('a foo value', 'a wibble value')

Et en ajoutant un! le fait lancer un RecordNotFound si rien n'est trouvé:

Foo.find_by_bar!('a-value')
4
Will Tomlins

Autre alternative:

Foo.find(:first, conditions: { bar: 'a-value' })

Vous pouvez également utiliser plusieurs attributs:

Foo.find(:first, conditions: { bar: 'a-value' , wibble: 'a wibble value' })
2
Victor Lellis