AVERTISSEMENT !!! Première solution d'itération - cela pourrait être plus simple
Vous pourriez avoir besoin d'une relation polymorphe pour réaliser le mappage.
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
Maintenant, vous pouvez avoir `Event.first.inviteables (cela renvoie une collection d'utilisateurs et groupes)
Selon vous, nommez les options pour vos 2 collections différentes, par exemple:
<select name='event[event_inviteables]' ...>
<option value='group[][1]'>Group 1</option>
..
<option value='user[][1]'>User 1</option>
Dans votre modèle d'événement, vous aurez besoin d'avoir une méthode event_inviteables=
pour déterminer ceux qui sont les utilisateurs, et ceux qui sont des groupes et mettre à jour les collections inviteable en conséquence
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
Merci beaucoup pour une réponse détaillée. J'ai obtenu la première partie à droite (association polymorphique) et je peux appeler Event.first.invitables. Cependant, je ne peux pas implémenter la deuxième partie, à savoir, l'étiquette de case à cocher. (Je suis désolé de confondre la boîte de sélection avec check_box). Comme vous le savez très bien, pour check_box_tag, je dois passer un tableau [id, class_name] au lieu de simplement id: invitable => {{id => "1", name => "Utilisateur"}, {id => " 4 ", nom =>" Groupe "}}. Comment devrais-je utiliser votre solution pour l'étiquette de case à cocher? Merci encore. – AdamNYC
La case à cocher prend le nom et la valeur uniquement l'événement '<% = check_box_tag '[event_inviteables] [utilisateur] []', user.id%><% = check_box_tag 'événement [event_inviteables] [groupe] []', group.id %> '(bien sûr, vous devez également tester si l'utilisateur doit être coché ou non dans la page d'édition d'événement). – tamersalama