2010-12-28 2 views
0

Derzeit meine Nutzer können Standorte ihre Profile über ein Formular hinzufügen, die diese Aussage enthält: (Ich verwende RoR3, HAML, sqlite3 für Entwickler und MySQL für prod)Wie kann ich Datensätze finden, deren Name nicht einem von einer anderen Abfrage bereitgestellten Array entspricht?

= select_tag "id", options_from_collection_for_select(Location.all, 'id', 'name') 

jedoch ermöglicht dies dem Benutzer denselben Standort mehrere Male hinzufügen. Ich möchte nur die Orte auflisten, die der Nutzer NICHT bereits gepostet hat. Also möchte ich etwas tun wie:

Location.find(:all, :conditions => ["name != ?", user.locations]) 

Dies funktioniert natürlich nicht, während dies tut.

Location.find(:all, :conditions => ["name != ?", "New York"]) 

Das liegt daran, dass user.locations ein Array zurückgibt. Ich habe nicht die geringste Ahnung, wie ich an dieser Stelle vorgehen soll. Anders als SQL zu lernen, nehme ich an. Gibt es eine Methode dafür, die ich nicht finde?

Antwort

3

Etwas wie:

Location.find(:all, :conditions => ["name not in (?)", user.locations]) 

sollte es tun (obwohl zugegebenermaßen weniger effizient als ein äußeres Tun verbinden und Filterung null benutzerkennungen), je nachdem, was Ihr Array von „user.locations“ tatsächlich sind.

Als Nebenbemerkung, SQL zu lernen wird Sie zu einem viel leistungsfähigeren (und vermarktbaren) Web-Entwickler ... Denkanstoß machen.

+0

Danke! Ich habe ein wenig gelernt, aber es ist frustrierend, mehrere Sprachen gleichzeitig zu lernen. – TLK