【问题标题】:How to save data directly from the migration file in ruby on rails如何在 ruby​​ on rails 中直接从迁移文件中保存数据
【发布时间】:2012-09-11 05:58:17
【问题描述】:

在我的 ROR 项目中,我遇到了一个问题。该项目的先前开发人员已将一组数据保存到特定字段的单个列中。但现在我必须获取这些数据并将其保存到另一个具有当前表 ID 的单独表中。以下是我从数据库中获取详细信息的代码:

@ar = AResponse.select("id, selected_barriers");
    @ar.each do |p|
      p.selected_barriers.each do |barrier|

      end
    end

我想要的是我必须将p.idbarrier 保存到一个新表中,并且我必须在迁移文件中执行此操作。因此,当迁移运行时,它将从AResponse 获取所有现有详细信息并将其保存到新的。我可以只使用迁移文件吗?如果是这样,我该怎么做?

这是我的完整代码

我试过了,但它不起作用:以下是我的代码

class AnalysisBarriers < ActiveRecord::Migration
  def self.up

  end

  def change
    create_table :analysis_barriers do |t|
      t.integer :analysis_response_id, :null => false
      t.string :barrier
    end
    @analysis_response = AnalysisResponse.select("id, selected_barriers");
    @analysis_response.each do |p|
      p.selected_barriers.each do |barrier|
        AnalysisBarriers.create(:analysis_response_id => p.id, :barrier => barrier)
      end
    end
  end
  def self.down
    drop_table :analysis_barriers
  end
end

谢谢

【问题讨论】:

  • 你有这个其他表的模型吗?

标签: mysql ruby-on-rails database ruby-on-rails-3 migration


【解决方案1】:

是的,您可以在迁移后进行数据更改。无论您想做什么数据更改,您都可以在更改功能或向上功能中进行。举个例子

class Event < ActiveRecord::Migration
  def change
    create_table events do |t|
      t.datetime :starts_at
      t.datetime :ends_at
      t.timestamps
    end
    Event.create(:starts_at => Time.now, :ends_at => Time.now+1)
  end
end

上面的语句将在创建表后将数据添加到表中。

【讨论】:

  • 我已经创建了新表并迁移到数据库。那么在我的新迁移中,我可以在迁移中运行上面的代码吗?另外我还没有这个迁移的模型
  • 没问题,迁移与模型无关,您可以通过这种方式创建新的迁移以将数据放入表中。
  • 我现在就去做,我会告诉你的:)
  • 请再次检查我的问题,我添加了你提到的整个代码,但它不起作用:(
  • 这是错误:uninitialized constant CreateAnalysisBarriers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 2015-12-21
  • 2015-01-11
  • 1970-01-01
相关资源
最近更新 更多