0

ユーザーモデル、チームモデル、およびCoachingRoleモデルがあります。CoachingRolesモデルは、ユーザーとチームの間に1対多の関連付けがすでに存在するため、ユーザーとチームを関連付けるのに役立ちます。それぞれの関連付けは次のように設定されます。

ユーザー:

has_many :coaching_roles
has_many :teams_coaching, :through => :coaching_roles, :source => :team

チーム:

has_many :coaching_roles
has_many :coaches, :through => :coaching_roles, :source => :user

CoachingRole

belongs_to :team
belongs_to :user

ユーザーを編集するためのフォームがあり、その一部はそのCoachingRolesにチームを追加することです。これが私がこれまでに持っているselect_tagです:

= select_tag "user[coaching_role_ids]", options_for_select(@teams.map {|t| [t.name, t.id]})

その特定の行は、チームIDをユーザーに追加しますcoaching_role_idsが、明らかにその逆は追加しません。:multiple => true最終的にはそれに追加して、複数のチームの選択をユーザーのCoachingRolesに追加できるようにしたいと思います。これを行うための最良の方法は何ですか?

4

1 に答える 1

0

私はこれを実装で使用しました。

チームに名前の属性と、そのユーザー用に選択されたチームIDの配列を返すメソッドselected_team_idsがあると仮定します。

select_tag ("user[coaching_role_ids][]"), options_from_collection_for_select(Team.all, :id, :name, @user.coaching_role_ids), :multiple => true 

うまくいけば、それが役立ちます!

編集:@nilmethod自身の発見に基づいて上記のソリューションを編集しました。私の元の解決策は次のとおりです。

select_tag ("user[teams][]"), options_from_collection_for_select(Team.all, :id, :name, @user.team_ids), :multiple => true 

その時、私のテーブルは少し違った設定になっていると思います。ありがとう!

于 2012-07-03T06:34:37.997 に答える