Вы можете сделать это в двух местах, в SQL или в своем приложении.
Через запрос SQL:
SELECT * FROM table_a
UNION
SELECT * FROM table_b;
В приложении Rails:
a = A.all
b = B.all
ab = a + b
достаточно просто.
UPDATE: Так как вы хотите, чтобы сделать эти изменения на постоянной основе, вы должны создать миграцию, которая объединит две таблицы вместе. Это позволит убедиться, что Rails знает, что происходит, и это позволит вам перенести вашу производственную базу данных аналогичным образом. Поскольку ActiveRecord не имеет встроенную в таблице слияния, вы должны выполнить необработанный запрос SQL в вашей миграции, как так:
class MergeTableAWithTableB < ActiveRecord::Migration
def self.up
execute "INSERT INTO `table_a` (field_1, field_2, field_3) SELECT (field_1, field_2, field_3) FROM `table_b`;"
drop_table :table_b
end
def self.down
raise IrreversibleMigration
end
end
rake db:migrate
Затем запустите в командной строке, чтобы это действие, совершаемыми.
Это приводит к повторной индексации строк из table_b, хотя, поскольку перемещение их в table_a приведет к конфликтующим основным идентификаторам.
Я знаю, что большинство новичков в Rails не признают разницу, но правильно ли я предполагаю, что вы используете ActiveRecord с Rails, а не какой-либо другой ORM, такой как Sequel или DataMapper? – Phrogz
Да, я использую ActiveRecord с Rails – Tommy