2017-09-13 3 views
1

Ich versuche, eine AR Beziehung in einer bestimmten Datenstruktur abzubilden (übertragen als JSON werden), und ich kann es aus irgendeinem Grund nicht funktioniert, sind die Beziehungen immer nilActive Abfrage-Schnittstelle und Karte

Client.includes(:fixed_odds_account, person: [:phones, :emails]).map do |client| 
    { 
    id: client.id, 
    uri: client.uri, 
    updated_at: client.updated_at, 
    balance: client.fixed_odds_account.current_balance, 
    email: client.person.emails.pluck(:address), 
    first_name: client.person.first_name, 
    last_name: client.person.last_name, 
    number: client.person.phones.pluck(:number) 
    } 

Ich würde erwarten, dass dies eine Reihe von Hashes zurückgibt, aber es scheitert immer an der "Person" -Beziehung, die anscheinend Null ist (und es ist nicht). Was ist seltsam ist, dass wenn ich den Hash entfernen und nur client.person kann ich meine Daten sehen. Irgendeine Idee?

+2

Stack-Trace in der Frage enthalten –

Antwort

2

Verwenden Sie #joins. Mit #includes können Sie einen Client ohne Person treffen, da er den linken äußeren Join verwendet. Sie können auch #uniq hinzufügen, um Duplikate zu entfernen.

Client.joins(:fixed_odds_account, person: [:phones, :emails]).uniq.map #code omitted