2009-12-30 10 views
2

Je suis tellement habitué à oracle où vous pouvez simplementconcat deux champs activerecord

concat(field1, ' ', field2) 

mais si j'utilise activerecord pour trouver le champ1 et champ2, et je besoin d'un espace entre les deux, comment puis-je accomplir ceci?

Vive votre aide

Répondre

2

Je pense que les attributs virtuels sont jusqu'à votre allée. This Railscast les explique, avec un exemple qui ressemble à votre cas d'utilisation.

9

dans votre modèle:

def full_name 
    [first_name, last_name].join(' ') 
end 
+0

peut-il être utilisé uniquement pour afficher simplement dans un tag de sélection? – user211662

+1

non, il retourne juste une chaîne de deux champs concaténés, donc partout où vous voulez l'utiliser. – bobbywilson0

+0

par hasard, comment puis-je écrire que si j'ai quelque chose comme ça, qui est le premier choix qui a le nom et le second sélectionnez le prix ... sélectionnez "ventes", "nom", ventes. find (: all,: select => 'nom DISTINCT',: order => 'prix'). collect {| x | [x.name]} – user211662

2

pour la postérité et à venir Googlers, vous pouvez effectuer les opérations suivantes en supposant postgres (peut-être MySQL?):

User.select("(first_name || ' ' || last_name) as name").where(organization: current_user.organization) 

La sélection utilise le ||SQL operator pour concat la les chaînes des champs first_name et last_name et as name renvoie le résultat dans une colonne "nom".

Ce qui pourrait retourner:

+----+--------------------+ 
| id | name    | 
+----+--------------------+ 
| 3 | Ada Lovelace  | 
| 18 | Alan Turing  | 
+----+--------------------+ 
0

Utilisez # lors de l'adhésion de deux champs avec différents types de données. Par exemple, ajouter un entier et une chaîne avec + donnera une erreur.

class User < ActiveRecord::Base 
    def name 
    "#{first_name} #{last_name}" 
    end 
end