我正在尝试做相当简单的事情。我有两个模型,用户和组。为简单起见,让我们说,他们是这样的:从HABTM协会删除记录
class User < ActiveRecord::Base
has_and_belongs_to_many :groups
end
和
class Group < ActiveRecord::Base
has_and_belongs_to_many :users
end
现在,出于某种原因,我有一个具有同一组两次的用户。在Rails控制台中:
user = User.find(1000)
=> #<User id: 1000, first_name: "John", last_name: "Doe", active: true, created_at:
"2013-01-02 16:52:36", updated_at: "2013-06-17 16:21:09">
groups = user.groups
=> [#<Group id: 1, name: "student", is_active: true, created_at: "2012-12-24 15:08:59",
updated_at: "2012-12-24 15:08:59">, #<Group id: 1, name: "student", is_active: true,
created_at: "2012-12-24 15:08:59", updated_at: "2012-12-24 15:08:59">]
user.groups = groups.uniq
=> [#<Group id: 1, name: "student", is_active: true, created_at: "2012-12-24 15:08:59",
updated_at: "2012-12-24 15:08:59">]
user.save
=> true
而且有一些SQL输出已经静音了。我认为一切都应该设定,但事实并非如此。这些组没有更新,并且该用户仍然具有这两个。我可以进入连接表并手动删除重复项,但这似乎很笨拙,粗略和不必要。我在这里做错了什么?
我运行的Rails 3.2.11和Ruby 1.9.3p392
附加说明:我已经试过这许多不同的方式,包括使用user.update_attributes,并使用group_ids而不是组本身,没有无济于事。
这是发布此错误,在控制台中变量名保持一致。 – BSprague
以为我会先检查一下容易的东西。 ;-) – pjmorse
向关系船添加'uniq:true'将有助于'获得'uniq记录,但它不会停止创建重复记录。见http://stackoverflow.com/questions/1129781/has-and-belongs-to-many-avoiding-dupes-in-the-join-table –