2016-05-07 6 views
0

Momentan benutze ich diese Suche Artikel für bestimmte Kategorie in der DatenbankSuchabfrage nach einer neuen Spalte zu Tabelle um Schienen

@items=Item.where(:category_id => @active_category_id).order(:price) 

Aber vor kurzem habe ich eine Spalte zu Item Tabelle detail genannt zu finden. Es kann 0 oder 1 sein und es ist integer oder es kann leer sein, weil ich es gerade jetzt hinzugefügt habe und ich bereits einige Elemente in meinem db hatte. So, jetzt Ich brauche zwei Suche: Ich suche müssen, dass wieder Artikel mit detail=1

Und wo detail nicht 1. ist also mache ich es wie folgt aus:

#for items with detail = 1

@items=Item.where(:category_id => @active_category_id) .where(:detail=> 1).order(:price)

Es funktioniert.

Aber jetzt brauche ich Artikel zu finden, mit detail != 1

So schreibe ich

@items=Item.where(:category_id => @active_category_id) .where.not(:detail=> 1).order(:price) Und es funktioniert nicht. Was mache ich?

+0

vergleichen, Version der Schienen benutzen Sie? 'where.not()' wurde in Rails eingeführt 4 – TheGeorgeous

+0

@TheGorgeous 'gem 'Schienen', '4.2.5.1'' – user2950593

+0

Was ist die generierte Ausgabe und die SQL-Abfrage? Kannst du es in der Frage aktualisieren? – Pavan

Antwort

0

NULL Werte stimmen nicht mit einer Gleichheit oder Ungleichheit überein. Sie müssen explizit mit NULL vergleichen. Versuchen Sie Item.where(detail: nil).

Wenn Sie 0 OR NULL müssen Sie möglicherweise roh SQL schreiben: Item.where("detail = 0 OR detail IS NULL")

Sie auch Ihre db betrachten könnte Verfüllung die NULL Werte zu eliminieren, dann können Sie nur mit 1 und 0

Verwandte Themen