2016-07-19 9 views
1

Ich versuche, eine Teilmenge der Datensätze aus meiner Datenbank mit Rails 4.1.8 und Ruby 2.1.5 mit ActiveRecord auszuwählen. Aber das Ergebnis enthält die Datensätze, die ich mit der where.not-Klausel weglassen möchte. Die resultierende SQL ist auch unten angegeben. Es sieht für mich so aus, dass der SQL-Wert für die where.not-Klausel entweder ignoriert wird oder falsch ist. Was ist der richtige Weg, dies zu tun?Rails ActiveRecord gemischte Bedingungen von wo und wo.nicht

class TablesController < ApplicationController 

    def index 
    @tables = Table.all.order("fil ASC").where(object: ['REP', 'CPT']).where.not(srcmbr: 'A*') 
    end 

end 

Ergebnis

Table Load (7.3ms) SELECT inputfile.* FROM inputfile WHERE inputfile.object IN ('REP', 'CPT') AND (inputfile.srcmbr != 'A*') ORDER BY fil ASC 
    Rendered tables/index.html.erb within layouts/application (709.1ms) 
Completed 200 OK in 912ms (Views: 882.4ms | ActiveRecord: 20.4ms) 
+1

Stellt 'A *' das Muster mathing dar? Wenn ja, versuche: '.where ('srcmbr NICHT LIKE?', 'A%')' – maicher

+0

Nur ein Hinweis: 'Table.where (Objekt: ['REP', 'CPT']). Where.not (srcmbr : 'A *') .order (fil:: asc) '. Was stimmt überhaupt nicht mit der Abfrage? Klingt plausibel. – potashin

+0

Die mit 'A *' übereinstimmenden Elemente werden im Ergebnis angezeigt. –

Antwort

2

Entspricht A* Muster mathing? Wenn ja, versuchen Sie:

.where('srcmbr NOT LIKE ?', 'A%') 
0

.wo ('SRCMBR NOT LIKE?', 'A%')

Das ist mein Problem gelöst.

+1

Dies wurde von @maicher vorgeschlagen. Eine geeignete Vorgehensweise wäre es, ihn zu bitten, die Antwort zu posten und sie dann zu akzeptieren. –

+0

Ich hätte das gerne getan, aber ich bin mir nicht sicher, warum er die Antwort nicht gepostet hat. –

Verwandte Themen