在rails上使用created_at数据对数组进行排序(使用sort_by {| x | x.created_at}它只是保持相同的方式

时间:2015-03-23 23:58:39

标签: mysql sorting ruby-on-rails-4

我收到了这段代码:

def user_activity
      @array_activity = []
      @testannounces = Announce.all
      @testchallenges = Challenge.all
      @testannounces.each do |x|
        @array_temp = []
        @array_temp.push x.created_at
        @array_temp.push "annonunce"
        @array_temp.push x
        @array_activity.push @array_temp
      end
      @testchallenges.each do |y|
        @array_temp = []
        @array_temp.push y.created_at
        @array_temp.push "challenge"
        @array_temp.push y
        @array_activity.push @array_temp
      end
      @array_activity.sort_by { |x| x[2].created_at }
end

好吧,通过只打印x [2] .created_at,它会返回给我

<% @array_activity.each do |x| %>
  <p><%= x[2].created_at %></p>
<% end %>

2015-03-18 22:52:48 UTC

2015-03-18 22:59:06 UTC

2015-03-19 16:42:41 UTC

2015-03-19 23:20:25 UTC

2015-03-20 15:46:17 UTC

2015-03-23 23:35:43 UTC

2015-03-23 23:37:52 UTC

2015-03-23 23:59:37 UTC

2015-03-23 20:34:43 UTC

(我只有1个关于挑战的项目,如果你能注意到,那就是2015-03-23 20:34:43希望早于2015-03-23 23:59:37 UTC)

有人知道这里会发生什么吗?

1 个答案:

答案 0 :(得分:0)

sort_by不会改变接收者。如果要使用返回值,请将其保存到变量。

@activity_array = @array_activity.sort_by { |x| x[2].created_at }

或者,您可以使用爆炸版本来修改接收器。

@array_activity.sort_by! { |x| x[2].created_at }