2012-04-01 4 views
3

Angenommen, ich habe Benutzer Daten, dass die Speicher-Array von PET in String-DatentypRails aktive Datensatz Abfrage, serialisierte Array

[ 
    #<User id: 1, name: "John", pets: "---\n- cat\n- dog\n- bunny\n- ''\n">, 
    #<User id: 2, name: "Pete", pets: "---\n- dog\n- bunny\n- ''\n">, 
    #<User id: 3, name: "Jack", pets: "---\n- cat\n- ''\n">, 
    #<User id: 4, name: "Kurt", pets: "---\n- cat\n- bunny\n- ''\n"> 
] 

Kann ich alle Benutzer bekommen, die eine Katze hat? Vielleicht etwas wie User.find_all_by... oder User.where(....) oder alles, was als eine Beziehung zurück? So kann ich mit aktiver Datensatzabfrage bestellen.

Ich weiß, ich kann alle Benutzer erhält, die eine Katze mit

User.all.select{|s| YAML.load(s.pets).include?'cat'} 

hat, aber es Array umwandeln, die nicht mit aktiver Datensatz Abfrage bestellt werden.

thx für die Hilfe.

+0

Überprüfung dieser Artikel http://stackoverflow.com/questions/9814622/searching-serialized-data-using-active-record – hiphapis

Antwort

1

Sie müssen Ihre Daten normalisieren, Pet-Modell hinzufügen und has_and_belongs_to_many Zuordnung zwischen diesen Modellen festlegen.

+0

aus irgendeinem Grund vermeide ich ein anderes Modell hinzuzufügen. es ist in Ordnung für mich, wenn es keine bessere Lösung gibt. thx – raymondralibi

3

Sie könnten einfaches SQL verwenden, um zu sehen, ob 'cat' in der serialisierten Spalte angezeigt wird.

User.where('pets LIKE "%cat%"').all

+2

es wird auch "Wels" abgerufen – raymondralibi

+0

Guter Punkt - dann tun User.where ('Haustiere LIKE "% cat \\ n%"'). alle – frontendbeauty

Verwandte Themen