RoR搜索条件比较两列

时间:2013-05-14 09:58:44

标签: ruby-on-rails-3

我基本上想做的是:

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

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

我实际上不想写完一个 for each,如果end_date早于start_date,则推送到数组。

如何以漂亮的'Railsy'方式实现这一目标?

提前谢谢。

编辑:

我认为问题是比较两列的值。 (最重要的)每个查询都将单元格值与输入值进行比较 这是一个黑暗中的镜头,但也许是一个正确的方向?

尚未找到解决方案。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

a = Assignment.all(:conditions => ["end_date < ?", :start_date ])

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

我假设您使用的是ActiveRecord

答案 2 :(得分:0)

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

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

改编自this answer