Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用迁移中更改的数据复制rails表_Mysql_Ruby On Rails_Ruby_Sqlite_Rails Migrations - Fatal编程技术网

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控制台中,也可以将其用作脚本!希望有帮助!