Rails 2:保存新的HABTM关系

时间:2012-01-30 19:14:09

标签: ruby-on-rails redmine has-and-belongs-to-many

我正在尝试在用户和类别之间保存新的HABTM关系。

我的用户模型:

class User < ActiveRecord::Base
    has_and_belongs_to_many :categories
end

我的分类型号:

class Category < ActiveRecord::Base
     has_and_belongs_to_many :users
end

我正确设置了连接表。问题是,我无法在用户控制器上进行任何更改,只能在用户视图上进行更改。因此,在用户视图中,有一个collection_select:

<%= f.collection_select :category_ids, Category.all, :id, :title, 
    { :selected => @user.category_ids }, 
    { :multiple => true, :name => 'user[category_ids][]' } 
-%>

我可以选择我的用户所属的类别,但是当我点击提交时,除了在连接表上未更新的类别之外,其他每个属性都会被保存。

如果我检查params,我可以看到category_ids正确传递:

"user"=>{"category_ids"=>["2", "4"]

但我无法在用户控制器上做任何事情,因为我不允许乱用代码。有没有办法自动更新连接表,或者我必须手动更新它?

PS - 我不能弄乱用户控制器,因为我实际上正在为Redmine构建一个插件。

谢谢!

1 个答案:

答案 0 :(得分:0)

我也是一个RoR新手买的怎么样:

<% for category in Category.find(:all) %>
  <%= check_box_tag "user[categories_ids][]", category.id,  @user.categories.include(category) %>
  <%= category.title %>
<% end %>

另外,请仔细检查您的attr_accessible是否全部存在。