Ich möchte ein Post
Modell finden, dessen title
ist "foo", aber, wenn der Beitrag nicht existiert, "bar" und dann "Foobar".Liefert find_by immer eine Übereinstimmung zum ersten eines Array von Bedingungen, wenn möglich?
Dafür schrieb ich folgendes:
Post.find_by(title: %w(foo bar foobar))
Es scheint jetzt zu funktionieren gut, aber ich bin mir nicht sicher, ob die find_by
Methode immer zuerst den ersten Wert in dem Array von Strings findet.
Wenn es Beiträge, deren Titel "foo"
und "bar"
, wird der Code oben immer wieder zurückkehren an den Pfosten mit dem Titel "foo"
?
'find_by' Rückkehr höchstens ein Rekord, so dass die„die Beiträge sortieren danach“ist nur eine komplizierte Art und Weise eine NoMethodError zu heben. Der 'ORDER BY CASE ...' Ansatz OTOH sollte mit jedem RDBMS funktionieren und funktionieren. –
'ORDER BY CASE' kann bei mehr als 20 dynamischen Titeln schnell unbrauchbar werden. Man sollte entweder die 'order'-Klausel dynamisch erstellen oder 'Post' verwenden.wo (Titel: Titel) .sort_by'. – mudasobwa
Danke! Ich werde mit dem 'ORDER BY CASE' gehen. Um die bedingte Zeichenfolge zu vereinfachen, schrieb ich wie 'titles.map.with_index {| title, i | "wenn '# {title}' dann # {i}"} .join'. – ironsand