我有一个类User,它有很多事件,属于很多组。我想允许用户创建事件,并按组,用户ID或两者限制他想要邀请的人。
我应该如何允许多个选择框标记显示组和个人都可选择?我正在考虑创建类似acts_as的东西,但它似乎不必要地复杂。
答案 0 :(得分:1)
警告!!!第一个迭代解决方案 - 它可能更简单
您可能需要多态关系才能实现映射。
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