使用update_attributes进行批量分配不会更新collection_singular_ids

时间:2012-07-04 12:03:26

标签: ruby-on-rails ruby-on-rails-3 activerecord mass-assignment

我有一个简单的User模型,它使用连接表(Town)与许多has_and_belongs_to_many个对象相关联。现在,我想通过分配逗号分隔的城镇ID列表来更新属于特定用户的城镇(直接来自作为HTTP POST参数发送的表单)。

使用以下控制器代码保存用户对象:

@current_object.update_attributes(params[:user])

params[:user]包含town_ids,例如设置为1,4,6

不幸的是,这根本不会更新用户城镇协会。但是,如果我手动操作,它的效果非常好:

User.find(:first).town_ids = "1,4,6" # this saves automatically

难道只是因为无法对这些collection_singular_ids字段进行大量分配吗?

我的用户模型包含以下内容:

has_and_belongs_to_many :towns

# necessary for mass-assignment, otherwise it results in an exception:
attr_accessible :town_ids

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您必须将town_ids作为数组传递:

User.find(:first).update_attributes(:town_ids=>[1,4,6])

如果您将ID作为字符串传递,Rails将尝试将字符串转换为整数:

"1,4,6".to_i # => 1