2009-08-12 9 views
1

Ich habe eine Anwendung, die Dokumente speichert, die von Benutzern erstellt wurden. Diese Dokumente haben Autoren, Erstellungsdaten. Die Autoren können Rollen haben. Zusätzlich kann ein bestimmtes Dokument mit Schlagwörtern versehen werden. In der Datenbank befinden sich ~ 16.000 Dokumente, und ein Benutzer möchte möglicherweise die Dokumente mit einer beliebigen Kombination dieser Informationen als Einschränkung anzeigen. Sehen Sie beispielsweise alle Dokumente eines bestimmten Autors an oder veröffentlichen Sie sie in einem bestimmten Zeitfenster oder von Autoren in dieser Rolle usw. (und eine beliebige Kombination davon).Der beste Weg, um mehrere mögliche Abfragen Bedingungen auf einer Indexseite zu behandeln

Gibt es eine empfohlene beste Möglichkeit, dies zu implementieren? In der Regel habe ich die gewünschten Bedingungen im params-Hash übergeben und dann entweder ein kompliziertes if ... elsif .... else benutzt, um die übergebenen Bedingungen direkt in verschiedene Model.find-Aufrufe zu decodieren. Alternativ dazu verwende ich eine ähnliche if-Sequenz, um die richtige SQL-Bedingungsphrase zu erstellen und dann einen einzelnen Suchaufruf zu verwenden.

Beide scheinen wie Hacks und es sollte einen besseren Weg, um es mit benannten Bereichen zu tun, aber ich kann nicht einen sauberen Weg, um mit den Permutationen umzugehen.

Antwort

0

Sie müssen nur mit Model.find eine Zeile Code haben. Anstatt bedingte Logik zu verwenden, um mehrere find Aufrufe zu erstellen, verwenden Sie bedingte Logik, um den :conditions Hash zu füllen, der an den find Aufruf übergeben wird.

Verwandte Themen