Add method for retrieving triadic closures
							parent
							
								
									a2696cf542
								
							
						
					
					
						commit
						017350e0ea
					
				|  | @ -193,6 +193,25 @@ class Account < ApplicationRecord | |||
|       nil | ||||
|     end | ||||
| 
 | ||||
|     def triadic_closures(account, limit = 5) | ||||
|       sql = <<SQL | ||||
|         WITH first_degree AS ( | ||||
|             SELECT target_account_id | ||||
|             FROM follows | ||||
|             WHERE account_id = ? | ||||
|           ) | ||||
|         SELECT accounts.* | ||||
|         FROM follows | ||||
|         INNER JOIN accounts ON follows.target_account_id = accounts.id | ||||
|         WHERE account_id IN (SELECT * FROM first_degree) AND target_account_id NOT IN (SELECT * FROM first_degree) AND target_account_id <> ? | ||||
|         GROUP BY target_account_id, accounts.id | ||||
|         ORDER BY count(account_id) DESC | ||||
|         LIMIT ? | ||||
| SQL | ||||
| 
 | ||||
|       Account.find_by_sql([sql, account.id, account.id, limit]) | ||||
|     end | ||||
| 
 | ||||
|     def following_map(target_account_ids, account_id) | ||||
|       follow_mapping(Follow.where(target_account_id: target_account_ids, account_id: account_id), :target_account_id) | ||||
|     end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue