2016-06-22 94 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看起來很有幫助,但它複製到另一個表中,它只使用ruby而不是ruby migrations是否合法遷移?任何幫助,將不勝感激。

+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。新(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獲得更多關於種子的信息.rb)

對於使用Rails控制檯/腳本:

如果你想這樣做,使用Rails控制檯預先存在的比薩餅行手動在終端rails c類型並輸入:

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

這個問題是因爲我的數據庫不是空的,它相當完整。所以我不能使用種子,也就是說種子像我認爲的那樣工作。我可以使用腳本,但這有點痛苦。 –

+0

底部應該能夠做到你所要求的而不要求你有一個空的數據庫。您可以將其粘貼到rails控制檯或將其用作腳本!希望能幫助到你! – TheZanke