

ArticleとUserというモデルがあります。

[code]

     class Article < ApplicationRecord
       belongs_to :user
     end
    
     class User < ApplicationRecord
       has_many :articles
     end
    
[/code]

Userのidをキーとして、Aritcleをグループ化しました。

[code]

     Article.includes(:user).references(:user)
            .group_by{|a| a.user_id}
    
[/code]

この結果は以下のようにUserのidがキー、Articleモデルのインスンタンスの配列がバリューとなったハッシュが返ってくると思います。

[code]

    { 1 => [...], 2=> [...], 3=> [...], ..}
    
[/code]

このArticleモデルのインスタンスを **各配列内で** ソートするにはどうしたらいいでしょうか。


CC BY-SA 3.0
2017-04-21T05:19:47.263
34177
2017-09-26T07:58:04.007
22691
question
ruby-on-rails
modelのインスタンスの配列をソートする方法


Hash上になったあとであれば `Hash#transform_values` のブロックでソートすればよさそうです。

元々Rails(ActiveSupport)で実装されたメソッドですが、Ruby 2.4.xにも採用され、ネイティブ実装されています。

<https://bugs.ruby-lang.org/issues/12512>  
<http://api.rubyonrails.org/classes/Hash.html#method-i-transform_values>

また、 `group_by`
はレコードを読み込んだ後のRuby上の処理であり、その[実装](https://github.com/ruby/ruby/blob/trunk/enum.c#L863)上、元データの出現順に並びますから、
ARel(=SQL)レベルで `order` しておくだけでもよさそうです。


CC BY-SA 3.0
2017-04-21T08:53:49.810
34184
2017-04-21T09:08:55.890
2017-04-21T09:08:55.890
17037
17037
34177
answer