Si vous tombez sur cela, vérifiez les deux réponses car je voudrais maintenant utiliser plumer pour cela
J'ai un ensemble de données personnalisé assez volumineux que j'aimerais renvoyer en tant que fichier 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 le faire fonctionner?
merci
edit 1
Sinon, y a-t-il un moyen de transmettre uniquement un tableau des attributs que je veux inclure?
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])
Cette documentation de référence vous donne la liste complète des options que vous pouvez utiliser avec .find
, Y compris comment limiter par numéro, id ou toute autre colonne/contrainte arbitraire.
l = Location.where(["id = ?", id]).select("name, website, city").first
Réf.: Interface de requête d'enregistrement actif
Vous pouvez également permuter l'ordre de ces appels chaînés en faisant .select(...).where(...).first
- tous ces appels ne font que construire la requête SQL puis l'envoyer.
plumer (nom_colonne)
Cette méthode est conçue pour effectuer une sélection sur une seule colonne en tant que requête SQL directe. Array de tableau avec les valeurs du nom de colonne spécifié. Les valeurs ont le même type de données que la colonne.
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
Son introduction Rails 3.2 et accepte uniquement une colonne. Dans Rails 4, il accepte plusieurs colonnes
Ma réponse arrive assez tard, car je suis un tout nouveau développeur. Voici ce que vous pouvez faire:
Location.select(:name, :website, :city).find(row.id)
Btw, c'est Rails 4