ActiveRecord find et retourne uniquement les colonnes sélectionnées

modifier 2

Si vous tombez par hasard sur cela, vérifiez les deux réponses car j’utiliserais maintenant le pinceau pour cela.


J’ai un dataset personnalisé assez volumineux que je souhaiterais réintégrer sous le nom de json. Une partie est:

l=Location.find(row.id) tmp[row.id]=l 

mais j’aimerais faire quelque chose comme:

 l=Location.find(row.id).select("name, website, city") tmp[row.id]=l 

mais cela ne semble pas fonctionner. Comment pourrais-je que cela fonctionne?

THX

modifier 1
Sinon, existe-t-il un moyen de ne transmettre que les atsortingbuts souhaités?

Dans les rails 2

l = Location.find(:id => id, :select => "name, website, city", :limit => 1)

…ou…

l = Location.find_by_sql(:conditions => ["SELECT name, website, city FROM locations WHERE id = ? LIMIT 1", id])

Ce document de référence vous donne la liste complète des options que vous pouvez utiliser avec .find , y compris comment limiter par nombre, par identifiant ou par toute autre colonne / contrainte arbitraire.

Dans Rails 3 avec interface de requête ActiveRecord

l = Location.where(["id = ?", id]).select("name, website, city").first

Ref: Interface de requête d’enregistrement actif

Vous pouvez également échanger l’ordre de ces appels chaînés en faisant .select(...).where(...).first – tous ces appels font la requête SQL et l’envoient ensuite.

pincer (nom_colonne)

Cette méthode est conçue pour effectuer une sélection par une seule colonne en tant que requête SQL directe. Retourne un tableau avec les valeurs du nom de colonne spécifié.

Exemples:

 Person.pluck(:id) # SELECT people.id FROM people Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people Person.where(:confirmed => true).limit(5).pluck(:id) 

voir http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

Ses rails 3.2 introduits et acceptent seulement une seule colonne. Dans les rails 4, il accepte plusieurs colonnes

Ma réponse arrive assez tard parce que je suis un nouveau développeur. Je pense que ce que mon ami cherchait c’est ceci:

Location.select(:name, :website, :city).find(row.id)

Btw, c’est Rails 4