Mysql 使用迁移中更改的数据复制rails表
我有一个桌子上的比萨饼,它和神秘有关,现在看起来像这样Mysql 使用迁移中更改的数据复制rails表,mysql,ruby-on-rails,ruby,sqlite,rails-migrations,Mysql,Ruby On Rails,Ruby,Sqlite,Rails Migrations,我有一个桌子上的比萨饼,它和神秘有关,现在看起来像这样 |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_
|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 |
基本上,我只想复制表中的数据,并将其粘贴回同一个表中,但略有不同。更糟糕的是,我对RubyonRails很差劲
我试过了,但我就是想不出复制一个表,然后用修改过的数据粘贴一个表的语法。更糟糕的是,我的测试站点在sqlite中,而我的生产服务器在MYSQL中。所以我不能只写一个或另一个,它必须使用ruby迁移语法
这看起来很有帮助,但它正在复制到另一个表中,并且它只使用ruby而不是ruby迁移,在迁移中合法吗?如果您有任何帮助,我们将不胜感激。这里不适合使用迁移。迁移是为了调整数据库结构;它们不用于插入、删除或修改记录 您可能希望使用seeds.db(用于为数据库设置初始数据种子),或者只在rails控制台或独立脚本中执行该操作 用于使用种子。db: 从一个空的比萨饼数据库开始,假设您的
比萨饼
模型包含属于:神秘
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
(有关seeds.rb的更多信息,请参阅)
用于使用rails控制台/脚本:
如果要使用rails控制台手动执行此操作,请在终端中键入rails c
,然后输入:
Pizza.all.each { |p| Pizza.create(mystery_id: 2, name: p.name, description: p.description) }
在这里使用迁移并不合适。迁移是为了调整数据库结构;它们不用于插入、删除或修改记录 您可能希望使用seeds.db(用于为数据库设置初始数据种子),或者只在rails控制台或独立脚本中执行该操作 用于使用种子。db: 从一个空的比萨饼数据库开始,假设您的
比萨饼
模型包含属于:神秘
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
(有关seeds.rb的更多信息,请参阅)
用于使用rails控制台/脚本:
如果要使用rails控制台手动执行此操作,请在终端中键入rails c
,然后输入:
Pizza.all.each { |p| Pizza.create(mystery_id: 2, name: p.name, description: p.description) }
我使用了一些我注意到的堆栈溢出问题,这就是我想到的。不过,我最终还是使用了迁移,而且效果很好
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
我使用了一些我注意到的堆栈溢出问题,这就是我想到的。不过,我最终还是使用了迁移,而且效果很好
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
如果数据少,那么就这样做
Pizza.each{p|Pizza.create!(:mystry|id=>2,:name=>p.name,:description=>p.description)}
如果数据少,就这样做Pizza.each{p|Pizza.create!(:mystry|id=>2,:name=>p.name,:description=>p.description)}
将模型排除在迁移之外很重要。如果模型更改,此迁移也可能失败。考虑使用种子或专用脚本。但是如果模型改变,专用脚本也会失败。有没有办法说foo=foo.new(a.everythings\u in\u a,:神秘的\u id=>2)让模型远离迁移是很重要的。如果模型更改,此迁移也可能失败。考虑使用种子或专用脚本。但是如果模型改变,专用脚本也会失败。有没有办法说foo=foo.new(a.everythings\u in\u a,:神秘的\u id=>2)问题是我的数据库不是空的,而是满的。所以我不能使用种子,也就是说,如果种子像我想的那样工作。我可以使用一个脚本,但这有点痛苦。底部部分应该可以做你要求的事情,而不需要你有一个空的数据库。您可以将其粘贴到rails控制台中,也可以将其用作脚本!希望有帮助!问题是我的数据库不是空的,而是满的。所以我不能使用种子,也就是说,如果种子像我想的那样工作。我可以使用一个脚本,但这有点痛苦。底部部分应该可以做你要求的事情,而不需要你有一个空的数据库。您可以将其粘贴到rails控制台中,也可以将其用作脚本!希望有帮助!