ВНИМАНИЕ !!!Решение для первой итерации - это может быть проще
Вам может потребоваться полиморфное отношение для достижения сопоставления.
Event
has_many :invitations
has_many :user_invitations, :class_name => "Invitation", :conditions => "inviteable_type = 'User'"
has_many :group_invitations, :class_name => "Invitation", :conditions => "inviteable_type = 'Group'"
Invitation
belongs_to :inviteable, :polymorphic => true
#Invitations table would have inviteable_id, inviteable_type columns
User
has_many :invitations, :as => :inviteable
Group
has_many :invitations, :as => :inviteable
Теперь вы можете иметь `Event.first.inviteables (это вернет коллекциюпользователей и групп)
По вашему мнению, назовите опции для ваших 2 коллекций по-разному, например:
<select name='event[event_inviteables]' ...>
<option value='group[][1]'>Group 1</option>
..
<option value='user[][1]'>User 1</option>
В вашей модели событий вам понадобится event_inviteables=
метод для определения, какие из них являются пользователями, а какие являются группами, и соответственно обновлять доступные коллекции
Event
def event_inviteables=(*args)
user_ids = #some magic to extract user_ids from args
group_ids = #some magic to extract group_ids from args
self.user_invitation_ids = user_ids
self.group_invitation_ids = group_ids
end