1

我基本上想做的是以下几点:

a = Assignment.all(:conditions => { :end_date < :start_date })

我只想选择.之前end_date的那些记录。start_date

我实际上不想最终写一个
for each, 推送到数组 ifend_date早于start_date.

我怎样才能以一种非常“Railsy”的方式实现这一目标?

先感谢您。

编辑:

我认为问题在于比较两列的值。(几乎)每个查询都将单元格值与输入值进行比较。
这是在黑暗中拍摄的,但也许是在正确的方向?

还没想出解决办法。

4

3 回答 3

1

在这里已经有一段时间了,但是,您可以使用以下ArelTable方法:

t = Assignment.arel_table
Assignment.where(t[:end_date].lt(t[:start_date]))

条件谓词文档:http ://www.rubydoc.info/github/rails/arel/Arel/Predications

ArelTable文档:http : //www.rubydoc.info/github/rails/arel/Arel/Table

和一个很好的指南:http: //jpospisil.com/2014/06/16/the-definitive-guide-to-arel-the-sql-manager-for-ruby.html

于 2015-05-07T23:05:21.827 回答
0
a = Assignment.all(:conditions => ["end_date < ?", :start_date ])

检查这个:http ://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-all

我假设您正在使用 ActiveRecord

于 2013-05-14T10:07:39.063 回答
0

尝试

a = Assignment.where('regioassignments.end_date < regioassignments.start_date')

在数据库中使用表名后跟 EXACT COLUMNNAMES,因为 ActiveRecord 可以识别并直接将其用作 SQL。这意味着 end_date 的列名可能是我从您的一条评论中得出的 assignment_expected_end_date 。

改编自这个答案

于 2013-10-15T13:21:25.453 回答