1

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

在我的用户模型中:

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并迁移了数据库,但也遇到了问题。

你知道如何完成任务吗?

4

1 回答 1

0

您可以使用 f.select 表单助手代替 select 标记,详见:Rails 3: Multiple Select with has_many through associations

此外,还有可以完美工作的双面多选,如:与 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>
于 2013-01-05T04:45:26.817 回答