在用户模型中,我有一个存档!销毁用户时调用的方法。
用户有许多用户组,当用户被销毁时,应该将这些用户组存储在新的ArchivedUserGroup表中。
ArchivedUser已成功创建,但我无法从UserGroup表中获取用户group_id
。
ArchivedUserGroup.create(
user_id: self.id,
group_id: UserGroup.where(:user_id => self.id).pluck(:group_id).to_set
)
感谢任何帮助过我的人,我只是开始使用Rails并使用相当复杂的代码库。
答案 0 :(得分:1)
由于每个用户都有许多UserGroup记录,并且ArchivedUserGroup与常规UserGroup(user_id,group_id)具有相同的属性,我认为您应该为每个用户UserGroup记录创建一个ArchivedUserGroup,而不仅仅是一个。您正在尝试将集合(如数组)传递给group_id列。虽然您还没有显示您的架构,但是group_id可能是一个整数,因为它是一个外键,所以数据类型不匹配。相反,你可以这样做:
UserGroup.where(user_id: self.id).each do |user_group|
ArchivedUserGroup.create(
user_id: self.id,
group_id: user_group.group_id
)
end
如果某些用户拥有大量用户组,这可能会很慢,因为在迭代中发生了数据库调用(创建)。这被称为N + 1查询,在这种情况下,它的方法是使用批量插入,通过原始SQL或类似bulk_insert
gem。