2016-04-04 5 views
1

J'utilise find_by_sql pour cette requête, et il renvoie un tableau. Je veux faire quelque chose comme Job.hongkong_jobs.where(status: true) mais je ne peux pas parce que c'est un tableau.Convertir tableau en 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" } 

Ma question est: comment puis-je le convertir en un objet d'enregistrement actif pour que je puisse faire .where dans ce cadre?

Répondre

0

1 - Faites-en SQL: mettre dans la requête SQL que vous avez ci-dessus comme SQL brute

OU

2 - Faites le tri dans ruby: Utilisez select sur votre tableau pour obtenir les enregistrements qui ne respecterait le critère (tous ceux qui ont un véritable statut)

0

Compte tenu d'un array de dossiers actifs, vous pouvez obtenir le ActiveRecord :: Relation en obtenant d'abord le ids des enregistrements à l'aide de la fonction map, utilisez .where pour les récupérer du modèle.

Dans votre cas:

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

0

J'ai essayé avec Job.where(aray.map(&:id)), et ne fonctionne pas pour moi. Ma solution est:

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

Vive.