我基本上想做的是:
a = Assignment.all(:conditions => { :end_date < :start_date })
我只想在end_date
之前选择start_date
之前的那些记录。
我实际上不想写完一个
for each
,如果end_date
早于start_date
,则推送到数组。
如何以漂亮的'Railsy'方式实现这一目标?
提前谢谢。
我认为问题是比较两列的值。 (最重要的)每个查询都将单元格值与输入值进行比较 这是一个黑暗中的镜头,但也许是一个正确的方向?
尚未找到解决方案。
答案 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