我正在使用Ruby on Rails 2.3.8,我有一个由其他两个集合构建的集合,如下所示:
@coll1 = Model1.all
@coll2 = Model2.all
@coll = @coll1 << @coll2
现在,我想按照created_at
属性按后代顺序对该集合进行排序。所以,我做了以下几点:
@sorted_coll = @coll.sort {|a,b| b.created_at <=> a.created_at}
我有以下例外:
undefined method `created_at' for #<Array:0x5c1d440>
eventhought它存在于那些模型中。
请帮帮我吗?
答案 0 :(得分:23)
您正在将另一个数组作为另一个元素推入@coll1
数组,您有两个选择:
展平生成的数组:
@coll.flatten!
或者最好只使用+
方法:
@coll = @coll1 + @coll2
对于排序,您应该使用sort_by
:
@sorted_coll = @coll.sort_by { |obj| obj.created_at }
答案 1 :(得分:4)
@coll1 = Model1.all
@coll2 = Model2.all
@coll = @coll1 + @coll2
@sorted_coll = @coll.sort_by { |a| a.created_at }
答案 2 :(得分:2)
答案 3 :(得分:0)
正如Jed Schneider所说,解决方案是:
@coll1 = Model1.all
@coll2 = Model2.all
@coll = @coll1 + @coll2 # use + instead of <<