在搜索分数时,这是正确的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列可以包含非数字字符串,那么您将从这种查询中获得exception,因此您可能需要考虑这一点。 如何计算此类数据取决于您必须处理的奇怪数据。

我建议你将得分列类型更改为整数。 您可以这样做生成迁移,如:

 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") 

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