2011-09-15 5 views
0

私は多くのイベントを持ち、多くのグループに属するクラスUserを持っています。ユーザーがイベントを作成し、グループ、ユーザーID、またはその両方で招待を希望するユーザーを制限できます。異なるモデルの複数の選択ボックスをレンダリングする

グループと個人の両方を選択可能にする複数の選択ボックスタグをどのように許可する必要がありますか? acts_asのようなものを作ることを考えていますが、それは不必要に複雑なようです。

答えて

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=方法を持っている必要がありますし、どれがグループであり、従って

をinviteableコレクションを更新します3210
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 
+0

詳細な回答をいただきありがとうございます。私は最初の部分(多型関連)を得て、Event.first.invitablesを呼び出すことができます。しかし、2番目の部分、つまりチェックボックスタグを実装することはできません。 (check_boxの選択ボックスを混乱させて申し訳ありません)。あなたは非常によく知っているので、check_box_tagのために、ちょうどidの代わりに配列[id、class_name]を渡す必要があります:invitable => {{id => "1"、name = "" User "}、{id = 4 "、name =>" Group "}}を選択します。チェックボックスのタグのためにソリューションをどのように習熟すればよいですか?再度、感謝します。 – AdamNYC

+0

チェックボックスタグは名前と値だけを取る<%= check_box_tag 'イベント[event_inviteables] [user] []'、user.id%><%= check_box_tag 'イベント[event_inviteables] [group] []'、group.id %> '(もちろん、イベント編集ページでチェックするかどうかをテストする必要もあります)。 – tamersalama

関連する問題