如何在表之间复制(活动)记录?

时间:2010-09-16 01:52:43

标签: ruby-on-rails activerecord

在映射到具有未知数量的相同列的ActiveRecord的两个表中,例如:

  Table A      Table B
 ---------    ---------
  id           id
  name         name
  age          email
  email        is_member

我如何(优雅地)将Table A的记录中的所有相同属性复制到Table B的记录中,但id属性除外?

对于上面的示例表,应复制nameemail字段。

2 个答案:

答案 0 :(得分:7)

试试这个:

获取TableA和TableB之间的列的交集

columns = (TableA.column_names & TableB.column_names) - ["id"]

现在遍历TableA行并创建TableB行。

TableB.create( TableA.all(:select => columns.join(",") ).map(&:attributes) )

编辑:复制一条记录:

table_a_record = TableA.first(:select => columns.join(","), :conditions => [...])
TableB.create( table_a_record.attributes)

答案 1 :(得分:0)

Migt考虑在2个表之间的acitverecord属性哈希上使用union函数。这不是一个完整的答案,但可能有所帮助