Rails多个选择框用于不同的模型

时间:2011-09-15 17:31:36

标签: ruby-on-rails forms html-select

我有一个类User,它有很多事件,属于很多组。我想允许用户创建事件,并按组,用户ID或两者限制他想要邀请的人。

我应该如何允许多个选择框标记显示组和个人都可选择?我正在考虑创建类似acts_as的东西,但它似乎不必要地复杂。

1 个答案:

答案 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