2016-06-22 4 views
0

У меня есть таблица пицца, связанных с тайной, которая в настоящее время выглядит как этоткопии рельсы таблицы с измененными данными миграции

|pizza_id|mystery_id|name|description| 
|1  |1   |fun |really fun | 
|2  |1   |car |it is fast | 
|3  |1   |hou |i live! | 
|4  |1   |air |breathy | 

и после моей миграции я хотел бы, чтобы она выглядела так:

|pizza_id|mystery_id|name|description| 
|1  |1   |fun |really fun | 
|2  |1   |car |it is fast | 
|3  |1   |hou |i live! | 
|4  |1   |air |breathy | 
|5  |2   |fun |really fun | 
|6  |2   |car |it is fast | 
|7  |2   |hou |i live! | 
|8  |2   |air |breathy | 

В основном я просто хочу скопировать данные таблицы и вставить ее обратно в ту же таблицу, но немного другую. Что еще хуже, я ПРИШЕЛ в рубине на рельсах.

Я пробовал, но я просто не могу определить синтаксис для копирования таблицы, а затем вставить таблицу обратно с измененными данными. Что еще хуже, мой тестовый сайт находится в sqlite, а мой производственный сервер находится в MYSQL. Поэтому я не могу просто написать одно или другое, чтобы использовать синтаксис миграции ruby.

Этот stackoverflow question выглядит полезным, но он копирует в другой стол, и он использует только рубино-рубиновые миграции, что легально в миграции? Любая помощь будет оценена по достоинству.

+0

если данные меньше, то просто так: 'Pizza.each {| p | Pizza.create! (: Mystry_id => 2,: name => p.name,: description => p.description)} ' –

ответ

-1

Я использовал немного вопрос переполнения стека, который я заметил, и это то, к чему я пришел. Однако в конечном итоге я использовал миграции, и он работал нормально.

def up   
    Foo.find_each do |a| 
     a.mystery_id = 1 
     a.save! 
    end 

    Foo.all.each do |a| 
     foo = foo.new(
     :name => a.name, 
     :name => a.description, 
     :mystery_id => 2 
    ) 
     reminderEvent.save! 
    end 
    end 

    def down 

    TODO: somehow remove half all with mystery_id = 2 
    end 
+1

Важно, чтобы модели не были перенесены. Если модель изменится, эта миграция также может потерпеть неудачу. Рассмотрите возможность использования семян или выделенного сценария. –

+0

, но если модель изменится, выделенный сценарий также потерпит неудачу. есть способ сказать foo = foo.new (a.everything_in_a,: mystery_id => 2 ) –

4

Миграции не могут быть использованы здесь. Миграции предназначены для настройки структуры базы данных; они не предназначены для вставки, удаления или изменения записей.

Возможно, вы захотите либо использовать seeds.db (для посева базы данных с исходными данными), либо просто выполнить операцию в консоли rails или автономном скрипте.

Для использования seeds.db:

Начиная с пустой базой данных пиццы и предполагается, что ваш Pizza модель содержит belongs_to :mystery

Mystery.create({ /* mystery params */ }) // Create mystery 1 
Mystery.create({ /* mystery params */ }) // Create mystery 2 

pizza_data = [ 
    { name: 'fun', description: 'really fun' }, 
    { name: 'car', description: 'it is fast' }, 
    { name: 'hou', description: 'i live!' }, 
    { name: 'air', description: 'breathy' }, 
] 

Mystery.all.each do |mystery| 
    pizza_data.each do |pizza_params| 
    mystery.pizza.create(pizza_params) 
    end 
end 

, а затем в терминале вы хотите запустить bundle exec rake db:seed

(см. http://www.xyzpub.com/en/ruby-on-rails/3.2/seed_rb.html для получения дополнительной информации о seeds.rb)

Для использования рельсов консоли/скрипт:

Если вы хотите сделать это вручную с помощью рельсов консоль с уже существующими строками пиццы типа rails c в терминале и введите:

Pizza.all.each { |p| Pizza.create(mystery_id: 2, name: p.name, description: p.description) } 
+0

Проблема в том, что моя база данных не пуста, она довольно заполнена. поэтому я не могу использовать семя, то есть, если семена работают, как я думаю, они это делают. я мог бы использовать скрипт, но это немного боль. –

+0

Эта нижняя часть должна быть в состоянии делать то, что вы просили, не требуя, чтобы у вас была пустая база данных. Вы можете вставить его в консоль рельсов или использовать его как скрипт! Надеюсь, поможет! – TheZanke

Смежные вопросы