2017-02-17 2 views
0

Ich habe eine Spalte in der ToolType-Tabelle namens "gelöscht", die wahr oder falsch sein kann. Ich möchte nur die Datensätze, die falsch sind. Ich schaffe es irgendwie nur nach der zweiten Tabelle (Toolunits) zu suchen, aber nicht nach der ersten (Tooltype). So würde das funktionieren, wenn ich eine Spalte „gelöscht“ in meinem toolunits Tisch habe:Ruby Active Record Join mit Bedingung

obj = Tooltype.joins(:toolunits).where(toolunits: {deleted: false}).distinct 

Aber dies nicht (siehe dritte Zeile):

get '/api/tooltypes' do 
    if params['selector'] 
    obj = Tooltype.joins(:toolunits).where(tooltype: {deleted: false}).distinct 
    else 
    obj = Tooltype.joins(:toolunits).distinct 
    end 
    obj.get_list() do |q| 
    if params['selector'] 
     q.where(deleted: false) 
    end 
    end.serialize.first 
end 

Wie kann ich den Zustand auf dem ersten Verwendung Tabelle?

+0

'Tooltype.joins (: toolunits) .wo (deleted: false) .distinct' –

+0

dass mehrdeutig ist – Ursus

+0

Ich denke, erhalten Sie einen Fehler für diese – Ursus

Antwort

0

Ich denke über zwei Wege

Tooltype.joins(:toolunits).where(Tooltype.table_name => {deleted: false}) 

Tooltype.joins(:toolunits).where('tooltypes.deleted = ?', false) 
+0

Ich habe es gerade getestet, um zu bestätigen. AR fügt den Tabellennamen innerhalb der 'where' Methode hinzu, wenn ein Hash verwendet wird. –

+0

Ja, aber welcher Tabellenname? In dieser Abfrage gibt es eine Verknüpfung. Also zwei Tabellennamen. – Ursus

+0

Es verwendet den Tabellennamen der aufrufenden Klasse. Natürlich habe ich in einer Abfrage mit einem Join und mit einem möglicherweise widersprüchlichen Namen versucht. Ich würde es hier nicht posten sonst –