2017-10-16 12 views
1

I以下のwhere句があります。変換文字列に数値に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> 

は私もスコアが70より大きくなることを追加したいと思いますので、何かのような...

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

...もちろん、これは動作しません。 where節でこれを行う方法はありますか?クエリコンストラクタとしてstringを受け入れる

+0

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

答えて

2

ActiveRecordの

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

これはうまくいきました...ありがとう!私は少しそれを微調整しなければならなかった。スコアは文字列であるため、スコア「OnlineCourseRegistration.where( "course_class_id =?AND status =?AND score>?"、681、 "Completed"、 "70")の前後に引用符を追加する必要がありました。 – Lumbee

0

あなたは、たとえば、ARELメソッドを使用することができ、生のSQLを使用しない場合:

後世のために
OnlineCourseRegistration.where(course_class_id: 681, status: "Completed").where(OnlineCourseRegistration.arel_table[:score].gt(70)).last 
0

が、私はこれらを追加したいですcast solutionsも回答:

where("score::int >= ?", 80)   # PostgreSQL-specific casting syntax 
where("cast(score as int) >= ?", 80) # Standard SQL type cast 
関連する問題