在Rails中使用select_tag更新多个对象

时间:2012-07-03 05:52:23

标签: ruby-on-rails ruby ruby-on-rails-3 forms associations

我有一个用户模型,一个团队模型和一个CoachingRole模型。 CoachingRoles模型用于关联用户和团队,因为用户和团队之间已存在一对多关联。各个协会的设置如下:

用户:

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

我有一个用于编辑用户的表单,其中一部分是将Teams添加到其CoachingRoles。这是我到目前为止的select_tag:

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

该特定行会向用户的coaching_role_ids添加一个团队ID,但显然不会添加反向。最后我想添加:multiple => true,并允许选择多个团队添加到用户的CoachingRoles。这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我在实施中使用了这个。

假设Team具有name属性和selected_team_ids方法,该方法返回为该用户选择的团队ID数组。

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 

我猜我的桌子设置有点不同。谢谢!