2017-02-22 8 views
0

私はモデルのこのチェーンがありますRails - 多くのモデルでgroup_byを使うには?

enter image description here

をそして私はsuboptionsのリストを持っています。私はgroup_by上記の各父親のサブオプションをご希望です。

したがって、カテゴリに分割され、アクティビティに分割され、オプションに分割されます。見える?

どうすればいいですか?

Suboptions.all.group_by(???) 
# or 
Suboptions.all.order_by(????) 
# or ???? 

例:

サブオプション

+----+-----------+ 
| id | option_id | 
+----+-----------+ 
| 1 |   1 | 
| 2 |   2 | 
| 3 |   2 | 
| 4 |   4 | 
| 5 |   3 | 
+----+-----------+ 

オプション

+----+-------------+ 
| id | activity_id | 
+----+-------------+ 
| 1 |   1 | 
| 2 |   2 | 
| 3 |   1 | 
| 4 |   3 | 
+----+-------------+ 

活動

+----+-------------+ 
| id | category_id | 
+----+-------------+ 
| 1 |   1 | 
| 2 |   2 | 
| 3 |   1 | 
+----+-------------+ 

カテゴリー

+----+------+ 
| id | name | 
+----+------+ 
| 1 | cat1 | 
| 2 | cat2 | 
+----+------+ 

検索は次の順序でIDのサブオプションを返す必要があります:[1,5,4,2,3] (視覚化してみてくださいカテゴリからサブオプションまで)

+0

sqlの 'GROUP BY'は、選択されたレコードを指定された条件でグループ化し、各グループの最初を返します。これは、あなたの望むことですか? https://www.tutorialspoint.com/postgresql/postgresql_group_by.htm – nicooga

+2

サンプル入力と期待される出力を提供できますか? – siopao

+0

@nicooga実際に必要なのは 'order_by'です。 –

答えて

2

データセットのサイズによっては、結合を行いたいと思うように聞こえてから、

Suboption.joins(option: {activity: :category}).order('categories.name') 

これは機能しますか?

+0

ほとんどそれ!私はすべてのテーブルに参加し、それらのID(category_id、activity_id、option_id、およびsuboption_id) –

関連する問題