2017-10-16 2 views
1

je la clause WHERE suivante:chaîne Convertir au numéro dans la clause where

OnlineCourseRegistration.where(course_class_id: 6, status: "Completed") 
=> #<OnlineCourseRegistration id: 142, cart_id: 150, user_id: 7069, course_class_id: 681, created_at: "2017-07-15 22:06:06", updated_at: "2017-07-20 23:59:01", exam_attempts: 1, exam_completed_at: "2017-07-20 23:57:32", evaluation_completed_at: "2017-07-20 23:59:01", status: "Completed", score: "87", add_extension: false, retest_cart_id: nil, retest_purchased_at: nil> 

Je voudrais également ajouter que le score serait supérieur à 70, donc quelque chose comme ...

OnlineCourseRegistration.where(course_class_id: 681, status: "Completed", :score.to_i > 70).last 

... mais bien sûr, cela ne fonctionne pas. Y a-t-il un moyen de le faire dans la clause where?

+0

https://apidock.com/rails/ActiveRec ord/QueryMethods/where – krishnar

Répondre

2

ActiveRecord où accepte string en tant que constructeur de requête

OnlineCourseRegistration.where("course_class_id = ? AND status = ? AND score > ?", 681, "Completed", 70).last 
+0

Cela a fonctionné ... merci! J'ai dû le modifier un peu. Puisque le score est une chaîne, j'ai dû ajouter des guillemets autour de la partition 'OnlineCourseRegistration.where (" course_class_id =? AND status =? AND score>? ", 681," Terminé "," 70 ")' – Lumbee

0

Si vous préférez ne pas utiliser SQL brute que vous pouvez utiliser les méthodes Arel, par exemple:

OnlineCourseRegistration.where(course_class_id: 681, status: "Completed").where(OnlineCourseRegistration.arel_table[:score].gt(70)).last 
0

pour la postérité que je voulais ajouter ces cast solutions en tant que réponse également:

where("score::int >= ?", 80)   # PostgreSQL-specific casting syntax 
where("cast(score as int) >= ?", 80) # Standard SQL type cast