2014-07-04 34 views
0

我为两种方法创建了以下语法,并且不能将它们放在一起。而且我希望有写这个较短的方式,因为它不是真正的瘦:获得数组中散列/对象的最小属性

@e = @c_entries.find_all{|i| i.order_no.between?(1,5)} 

给我的所有对象的数组,这是order_no是1和5之间!

@f = @c_entries.all(:select => :order_no).collect(&:order_no).min 

创建所有order_no的数组,并给我最小!

我现在正在尝试的是获取order_no在1到5之间的所有对象中的最小order_no尽可能短。

任何想法?

+0

什么问题结合这两个? –

+0

我在rails控制台中试过了,它给了我一个方法错误。 '@e = @ c_entries.find_all {| i | i.order_no.between?(1,5)}。all(:select =>:order_no).collect(&:order_no).min' ..并且它的方法很长,因为控制器必须做的更短那很多部分。它用于一个巨大的映射,所以我不想使用太多的查询。 – Syk

+0

我的天啊。你不知道这些意思是什么意思,是吗? –

回答

2

如果@c_entries包含在你的应用程序特定型号的集合,你可以采取的ActiveRecord的查询界面的优势:

@c_entries.where(order_no: 1..5).select(:order_no).min 

还有其他各种方式来缩小查询:http://guides.rubyonrails.org/active_record_querying.html#conditions

+0

不错,效果很好。只需添加'.order_no'即可获得order_no。 – Syk