2016-04-04 8 views
1

Ich habe ein Benutzermodell, das mit dem Profilmodell verknüpft wird, um eine Join-Tabelle zu erstellen, die alle Informationen zu jedem Modell enthält. Ich möchte eine Zeichenfolge an das Ende des Werts einer Spalte anhängen können, aber nur wenn dieses Feld vorhanden ist. Hier ist, was zur Zeit ich habeAnfügen von Zeichenfolgen an SQL-Join-Tabellen nur, wenn dieses Feld vorhanden ist

User.joins(:profile).select('users.id, 
          full_name AS name, 
          concat(profiles.address1, profiles.address2) AS address, 
          profiles.state, 
          profiles AS phone_number') 

Was mir geben:

id | Name | Address | State | Phone Number 
1  | Bob Smith | 123 Bakery Ln |  CA  | 123-456-7890 
2  | Linda Joe | Apt 51  |  AZ  | 098-765-4321 
3  | Steve Jobs | 1 Apple Drive |  CA  | 321-654-0987 

aber feststellen, dass Linda Joes Adresse ist gerade ihre Wohnung Nummer, hier ist, wie das Objekt aussieht: (User.find(2).profile.address1 == nil && User.find(2).profile.address2 == 'Apt 51') == true.

Ich möchte einen Weg finden, nur Adresse nur dann verketten, wenn Adresse1 vorhanden ist. Ich möchte dafür stattdessen aussehen:

id | Name | Address | State | Phone Number 
1  | Bob Smith | 123 Bakery Ln |  CA  | 123-456-7890 
2  | Linda Joe |    |  AZ  | 098-765-4321 
3  | Steve Jobs | 1 Apple Drive |  CA  | 321-654-0987 

Jede Hilfe wird geschätzt. Vielen Dank!

Antwort

1

können Sie verwenden, um die CASE Anweisung und tun eine bedingte Verkettung in Ihrem wählen:

User.joins(:profile).select('users.id, 
         full_name AS name, 
         CASE WHEN profiles.address1 IS NOT NULL 
         THEN concat(profiles.address1, profiles.address2) 
         ELSE '' END AS address, 
         profiles.state, 
         profiles AS phone_number') 
+0

Dank! Klappt wunderbar! – sclem72

+0

@ sclem72 Sie können die Antwort immer als korrekt akzeptieren, um anderen Leuten mit dem gleichen Problem zu helfen, zu wissen, dass dies helfen kann. – MurifoX

Verwandte Themen