Rails множественный блок выбора для разных моделей - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть класс User, который имеет много событий и принадлежит ко многим группам. Я хочу разрешить пользователю создавать события и ограничивать, кого он хочет пригласить, по группам, по идентификатору пользователя или по обоим.

Как мне разрешить множественный выборочный тег, который показывает как группы, так и отдельных лиц как выбираемые? Я подумываю о создании чего-то вроде actions_as, но это кажется излишне сложным.

1 Ответ

1 голос
/ 16 сентября 2011

ВНИМАНИЕ !!!Решение для первой итерации - это может быть проще

Вам может потребоваться полиморфное отношение для достижения сопоставления.

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
...