如何使用select_tag更新多对多关系

时间:2012-10-03 21:01:23

标签: ruby-on-rails-3 many-to-many html-select multi-select

假设我有如下定义的多对多关系:

在我的用户模型中:

class User < ActiveRecord::Base
 attr_accessible :userName (...) 
 has_and_belongs_to_many :groups
end

在我的小组模型中:

class Group < ActiveRecord::Base
  attr_accessible :groupName (...)
  has_and_belongs_to_many :users
end

我在更新中添加了我的用户控制器并创建:

@user.group_ids = Group.find(params[:group_ids]) if params[:group_ids]

用户表单包含一个多选列表,用于为每个用户选择组(以及实际工作的其他条件):

<%= select_tag("group_ids[]", options_for_select(Group.find(:all).collect { |gro| [gro.groupName, gro.id] }, @user.groups.collect { |gro| gro.id}), {:multiple=>true, :size=>15}) %>

当我创建或更新用户时,一切看起来都很好,但无论我在选项列表中做出什么选择,它都会向用户添加错误的组(总是id = 1的组)。 我尝试使用has_many_through并迁移了数据库,但也遇到了问题。

你知道如何进行作业吗?

1 个答案:

答案 0 :(得分:0)

您可以使用详细信息中的f.select表单帮助程序而不是select标记:Rails 3: Multiple Select with has_many through associations

此外,还有双面多重选择,如下所述:two sided multi select that works with Rails 3

我推荐http://loudev.com/中的那个,你只需要使用:

<%= f.select(:country, "country_id", Country.all.collect {|c| [ c.name, c.id ] }, {:include_blank => false}, {:class => "multiselect", :multiple => "multiple"}) %>

并在您的视图中添加以下Javascript:

<script>
$(document).ready(function (){
     $('.multiselect').multiSelect(); 
});
</script>