2017-07-26 1 views
0

Artikel in der Datenbank:Wie bekomme ich den exakt passenden Datensatz in Rails 3?

=> [#<Item id: 1, item_collection: [:LAPTOP, :COMPUTER, :MOUSE, :SPEAKER]>, 
    #<Item id: 2, item_collection: [:LAPTOPANDKEYBOARD, :DISK, :SCREEN]>] 

Unten Abfrage mir geben sowohl die Datensätze (die LAPTOP und LAPTOPANDKEYBOARD enthalten).

Item.where("item_collection like ?", "%LAPTOP%") 

=> [#<Item id: 1, item_collection: [:LAPTOP, :COMPUTER, :MOUSE, :SPEAKER]>, 
    #<Item id: 2, item_collection: [:LAPTOPANDKEYBOARD, :DISK, :SCREEN]>] 

Aber ich möchte nur den Datensatz, der nur LAPTOP hat.

#<Item id: 1, item_collection: [:LAPTOP, :COMPUTER, :MOUSE, :SPEAKER]> 

Antwort

1

Serialized Arrays fügen Sie am Ende jedes Artikels ein \n, so können Sie dies versuchen:

Item.where("item_collection LIKE ?", "%LAPTOP\n%") 

Eine andere Möglichkeit wäre, um alle Daten zu holen und sie dann filtern mit select, wie diese :

Item.all.select { |item| item.item_collection.include?(:LAPTOP) } 
+0

Das wird mir leere Array [] zurückgeben. – Kavincat

+0

@Kavincat Entschuldigung, ich habe verpasst, dass Sie ein serialisiertes Feld verwenden; Überprüfen Sie die aktualisierte Antwort. – Gerry

+0

@Kavincat Nach ein paar Tests denke ich, dass ich herausgefunden habe, wie man es mit sql macht; Überprüfen Sie die aktualisierte Antwort (erneut). – Gerry

Verwandte Themen