使用连接和“OR”条件编写ActiveRecord范围

时间:2011-06-29 21:22:32

标签: ruby-on-rails-3 activerecord

我有两张桌子:货物和舱单。

  • 货件:id,name
  • 清单:id,shipment_id,start_time,end_time

装运has_many Manifest,Manifest属于一个装运。

如何编写ActiveRecord范围,将范围内的所有货件返回给我:

  1. 如果它至少有一个清单,则当前时间介于开始和结束时间之间, OR
  2. 没有任何明显

1 个答案:

答案 0 :(得分:0)

嗨我不确定它是否可以通过ruby中的范围实现它可能会像......

   shipments = Shipments.all( :include => :manifests )
   empty_shipments = shipments.select { |item| item.manifests.blank? }
   non_empty_shipments = shipments - empty_shipments
   non_empty_shipments.delete_if {|item| (item.t_start..item.t_end).cover? Time.now}
   empty_shipments & non_empty_shipments