当搜索一个分数时,这是否是正确的Rails查询?
问题描述:
我有以下查询......当搜索一个分数时,这是否是正确的Rails查询?
CourseRegistration.where(status: "Completed").where("score >= ?", "80")
首先,是的,比分字段是一个数据库中的字符串。然而,这[主要]作品中,有100个没有被返回。我可以查询.where("score >= ?", "080")
,它确实按照我的意愿返回了80-100分的所有分数,但它的确感觉不错。还有另外一种方法我应该这样做吗?或者,也许有人可能会试图解释这个查询是如何工作的,所以我感觉更好。
答
您应该这样做的方法是将score
列更改为整数,以便事情按预期工作。如果你不能做到这一点,那么你可以施放分数查询:
where("score::int >= ?", 80) # PostgreSQL-specific casting syntax
where("cast(score as int) >= ?", 80) # Standard SQL type cast
当然,如果score
列可以包含非数字的字符串,然后你会从这种查询得到异常所以你可能需要说明这一点。你如何解释这些数据取决于你需要处理的奇怪数据。
+0
是的!我使用的是postgres,这样第一个例子就完美了。 – Lumbee
答
我建议你将分数列的类型改为整数。你可以这样做产生像迁移:
rails g migration ChangeScoreType
然后您编辑迁移文件是这样的:
class ChangeScoreType < ActiveRecord::Migration
change_column :course_registrations, :score, :integer, using: 'company_id::integer'
end
也,你可以投得分为您的查询的INT(应该测试)。就像这样:
CourseRegistration.where(status: "Completed").where("CAST(Score AS INT) >= ?", "80")
希望这会有所帮助,祝你好运!
你将分数存储为文本吗?为什么不简单'CourseRegistration.where(status:“Completed”)。where(“score> =?”,80)' – lad2025
你的分数数据类型是什么? –
Score是一个字符串。 – Lumbee