Я бы не использовал полиморфизм для потенциально больших таблиц. Я думаю, что лучший способ - это использовать has_and_belongs_to_many
отношения для такого рода отношений.
Не забудьте создать индексы для user_id, group_id, чтобы немного ускорить процесс. Вы можете сделать это, используя add_index(:table_name,[:user_id,:group_id])
.
Я бы также сделал отношение УНИКАЛЬНЫМ, что можно сделать, добавив :unique => true
в конце команды add_index
.