从表中删除一行到另一个表

时间:2012-12-30 18:32:54

标签: ruby-on-rails

我有两个表:Admin和Worker。他们有相同的论点(电子邮件,密码等)。

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

我尝试了下一件事:

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

但它不起作用:/

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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