2016-04-04 11 views
1

Ich verwende find_by_sql für diese Abfrage, und es gibt ein Array zurück. Ich möchte etwas wie Job.hongkong_jobs.where(status: true) tun, aber ich kann nicht, weil es ein Array ist.Konvertieren Array zu ActiveRecord :: Relation

scope :hongkong_jobs, -> { find_by_sql "SELECT DISTINCT(jobs.*) FROM" + Task.near([22.275754, 114.163056], 35.17936816723013, :units => :km).joins(:job).where(jobs: {status: [:open,:new]}).to_sql.split("FROM").last.split("ORDER").first + "ORDER BY start_at ASC" } 

Also meine Frage ist: wie kann ich es in ein aktives Datensatz Objekt konvertieren, damit ich .where in diesem Rahmen tun?

Antwort

0

1 - Tun Sie es in SQL und legt es in der SQL-Abfrage Sie oben als Ausgangs SQL haben

OR

2 - Haben die Sortierung in Ruby: Verwenden Sie select auf Ihrem Array die Datensätze zu erhalten das wäre Ihr Kriterium (alle diejenigen, die einen echten Status haben) entsprechen

0

ein array von Active Aufzeichnungen gegeben, können Sie die Active erhalten :: Relation, indem zuerst die ids der Datensätze zu erhalten, die map Funktion verwenden, dann verwenden .where um sie aus dem Modell zu holen.

In Ihrem Fall:

Job.where(array.map(&:id))

0

Ich habe versucht, mit Job.where(aray.map(&:id)), und nicht für mich arbeiten. Meine Lösung ist:

Job.where(id: array.map(&:id)), and it works. 

Beifall.

Verwandte Themen