0

我的控制器中有以下内容来获取一堆数据以显示在视图中

    @orders = Order.select{|order| order.email==@user.email}.select{|order| order.clip_status==true}.select{|order| order.dc>0}.select{|order| ((Time.now.to_date..(CustomVideo.find_by_order_id(order.id).created_at.to_date+30.days)).count-1)<0}

现在我需要根据创建日期订购它。

我尝试了以下并得到了错误:

@orders = Order.select{|order| order.email==@user.email}.select{|order| order.clip_status==true}.select{|order| order.dc>0}.select{|order| ((Time.now.to_date..(CustomVideo.find_by_order_id(order.id).created_at.to_date+30.days)).count-1)<0}.order('created_at DESC')

我得到一个错误。我该如何解决这个问题?

 undefined method `order' for []:Array
4

1 回答 1

2

您的问题来自滥用select- 您使用 select 就像ActiveRecord::Relation是通常的数组一样 - 并且以这种方式使用的 select 确实返回Array了不响应ActiveRecord范围的实例。我建议您where在可能的情况下使用并在应用所有 AR 范围后使用selectwith block (返回),如下所示:Array

@orders = Order.where('your conditions').order('created_at DESC').select { |order| order.dc > 0 }

顺便说一句,实际上也可以将 last 替换selectwhere(效率更高),如下所示:

Order.where('dc > ?', 0)
于 2013-10-16T07:29:24.807 回答