在映射到具有未知数量的相同列的ActiveRecord的两个表中,例如:
Table A Table B
--------- ---------
id id
name name
age email
email is_member
我如何(优雅地)将Table A
的记录中的所有相同属性复制到Table B
的记录中,但id
属性除外?
对于上面的示例表,应复制name
和email
字段。
答案 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函数。这不是一个完整的答案,但可能有所帮助