Как скопировать (активную) запись между таблицами, частично? - PullRequest
6 голосов
/ 16 сентября 2010

В двух таблицах, сопоставленных с ActiveRecord с неизвестным количеством идентичных столбцов, например ::100100

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

Как (изящно) скопировать все идентичные атрибуты из записи Table A в запись Table B, кроме атрибута id?

Для приведенных выше таблиц примеров следует скопировать поля name и email.

Ответы [ 2 ]

7 голосов
/ 16 сентября 2010

Попробуйте:

Получить пересечение столбцов между 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)
0 голосов
/ 16 сентября 2010

Migt рассмотрите возможность использования функции объединения для хеша атрибутов acitverecord между двумя таблицами. Это не полный ответ, но может помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...