

# 概要

初歩的な質問で申し訳ありません。  
`Connection.group(:user_id)`を実行すると、  
`Object doesn't support #inspect`になってしまいます。

# 環境

Ruby 3.1.0  
Ruby on Rails 6.1.4

# 該当のコード

model

[code]

    class User < ApplicationRecord
      has_many :connections
    end
    
    class Connection < ApplicationRecord
      belongs_to :user
    end
    
[/code]

上記の関係性で以下のような状況になります。

[code]

    irb(main):038:0> Connection.group(:user_id)
      Connection Load (1.2ms)  SELECT `connections`.* FROM `connections` GROUP BY `connections`.`user_id`
    (Object doesn't support #inspect)                                                                     
    =>  
    
[/code]

[code]

    irb(main):039:0> User.joins(:connections).group(:user_id)
      User Load (0.7ms)  SELECT `users`.* FROM `users` INNER JOIN `connections` ON `connections`.`user_id` = `users`.`id` GROUP BY `user_id`                                                                                                                  
    =>                                                                                                                 
    [#<User:0x0000000116f47d58                                                                                         
      id: 1,                                                                                                                                                                                    
      email: "demo-1@example.jp",
      created_at: Thu, 21 Apr 2022 15:26:53.000000000 JST +09:00,
      updated_at: Tue, 17 May 2022 08:49:46.000000000 JST +09:00>,
     #<User:0x0000000116f47c90
      id: 2,
      email: "demo-2@example.jp",
      created_at: Thu, 21 Apr 2022 15:28:27.000000000 JST +09:00,
      updated_at: Tue, 17 May 2022 08:51:19.000000000 JST +09:00>]
    
    
[/code]

このように、`Connection`自体を`user_id`でGROUP BYしようとすると  
`Object doesn't support #inspect`になってしまいますが、  
これを`User`に内部結合として使うときちんと動作します。  
今回はUserが重複しないConnectionを取得したいのですが、  
前者はなぜ動かないのでしょうか？  
また、「Userが重複しないConnection」を取得するにはどのような方法がありますでしょうか？  
よろしくご教授ください。

# 補足

ちなみに`group`の使い方で調べた時に出てくるコードで、

[code]

    User.group(:sex)
    
[/code]

というのがあり、これに似たものとして

[code]

    UserProfile.group(:sex) #User has_many :user_profilesです
    User.group(:email)
    
[/code]

なども試してみましたが、  
いずれも`Object doesn't support inspect`でした。


CC BY-SA 4.0
2022-05-17T02:28:08.027
88868
2022-05-17T06:08:36.873
2022-05-17T03:09:06.063
2238
19788
question
ruby-on-rails mysql
groupメソッドが使えない理由がわかりません。


こちら解決しました。  
本当に初歩的なことで、`group`はそもそも単体では使用できないそうです。  
集計系のメソッドと併用すると機能します。

[code]

    Connection.group(:user_id).minimum(:id).values
    
[/code]

とすることでひとまず`user_id`でまとめた中で最小の`connection.id`を取得することが可能です。  
（`maximum(:id)`にすれば最大のidが取得できます）  
ActiveRecord_Relationで返す方法についても調べたのですが、  
ちょっと上手くいかなかったのでまた研究してみます。  
ありがとうございました。


CC BY-SA 4.0
2022-05-17T06:08:36.873
88874
2022-05-17T06:08:36.873
19788
88868
answer