代码之家  ›  专栏  ›  技术社区  ›  ohho

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

  •  6
  • ohho  · 技术社区  · 14 年前

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

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

    如何(优雅地)从 Table A 记录 Table B ,除了 id 属性?

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

    2 回复  |  直到 14 年前
        1
  •  7
  •   Harish Shetty    14 年前

    试试这个:

    获取表A和表B之间的列的交集

    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)
    
        2
  •  0
  •   davydotcom    14 年前

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