0

我有两个表:Admin 和 Worker。它们具有相同的参数(电子邮件、密码等)。

我试图从 Worker 表中删除包含电子邮件的行:“foo@example.com”到 Admin 表中(并将其从 Worker 表中删除)。

我尝试了下一件事:

@email = 'foo@example.com'
@row_email_deleted = Worker.find_by_email(@email)
Admin.add(@row_email_deleted)
@row_email_deleted.destroy

但它不起作用:/

有人可以帮我解决我的问题吗?

4

2 回答 2

2

试试这个:

@email = 'alon@gmail.com'
@worker = Worker.find_by_email(@email)
@new_admin = @worker.becomes Admin
@new_admin.save
@worker.destroy

但我建议您应该尝试重构为 STI,例如:http ://blog.thirst.co/post/14885390861/rails-single-table-inheritance

于 2012-12-30T18:41:44.733 回答
1

除了apneadiving,我不知道'add'方法是由什么组成的。这并没有太多关于究竟是什么不起作用的细节使得很难知道它为什么不起作用。也就是说,忽略所有这些,我会做这样的事情:

Worker.transaction do
  @email = 'foo@example.com'
  @worker = Worker.find_by_email(@email)
  Admin.create(@worker.attributes.reject{|k,v| %w[id].include?(k)}) 
  @worker.destroy
end
于 2012-12-30T18:45:43.323 回答