Ruby Rails Active Record Query在两列上

时间:2014-05-25 18:45:35

标签: sql ruby-on-rails ruby

假设我们有以下表格:
员工
ID名称Sick_Leaves Casual_Leaves
约翰一书4 8 2南希5 2
3马太福音2 9

现在,如果我想获得所有雇用了更多病假而非临时病假的雇员列表,那么它在SQL中是直截了当的:
从员工中选择* Sick_Leaves> Casual_Leave

现在考虑到我为Employee定义了一个Rails Active Record Model类,如何使用模型类本身执行相同的查询?我陷入了如何定义WHERE子句的困境。如果是Sick_Leaves> 5(或一些固定数字),那么它的简单,但现在什么时候我们要比较两列本身?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

您可以使用以下ActiveRecord查询:

Employee.where('sick_leaves > casual_leaves')

答案 1 :(得分:3)

滑轨' Active Relation的界面没有一个简单的语法来表达"大于" (除其他外)。所以你可以使用手写的SQL(如@JKen12579建议的那样),或者你可以进入使用ARel语法的内容。 (起初它很奇怪,但仍然给你SQL的全部功能。)

Employee.where(arel_table[:Sick_Leaves].gt(arel_table[:Casual_Leaves]))

我推荐这种方法,因为它可以让你编写Ruby代码,它可以减轻必须编写表名的问题(例如&#34;我需要使用employees.<column>吗?&# 34;),它与数据库无关(这可能在这里可能不重要,但可能更晚......所以习惯了语法,从不担心)。