当搜索一个分数时,这是否是正确的Rails查询?

当搜索一个分数时,这是否是正确的Rails查询?

问题描述:

我有以下查询......当搜索一个分数时,这是否是正确的Rails查询?

CourseRegistration.where(status: "Completed").where("score >= ?", "80") 

首先,是的,比分字段是一个数据库中的字符串。然而,这[主要]作品中,有100个没有被返回。我可以查询.where("score >= ?", "080"),它确实按照我的意愿返回了80-100分的所有分数,但它的确感觉不错。还有另外一种方法我应该这样做吗?或者,也许有人可能会试图解释这个查询是如何工作的,所以我感觉更好。

+0

你将分数存储为文本吗?为什么不简单'CourseRegistration.where(status:“Completed”)。where(“score> =?”,80)' – lad2025

+0

你的分数数据类型是什么? –

+0

Score是一个字符串。 – Lumbee

您应该这样做的方法是将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") 

希望这会有所帮助,祝你好运!