根据旧表栏中的数据创建新表

时间:2012-09-25 22:43:07

标签: ruby-on-rails-3

我有一个表users,其中包含每个用户的详细信息。我想根据条件(例如它们的年龄)创建一个只包含users表中某些行的新表。我如何在rails中执行此操作?

1 个答案:

答案 0 :(得分:1)

您必须创建迁移。在此迁移中,您首先必须创建新表,然后您可以选择两个选项。

  1. 您可以使用模型读取数据,使用ruby过滤器方法过滤数据集,然后将剩余模型转换为新模型并保存。但我会建议您不要这样做,因为当您删除当前模型后,您将无法在以后执行此迁移。 (迁移使用旧模型来读取数据,但在代码中不再可用)
  2. 您使用纯SQL:

    class XMigration < ActiveRecord::Migration
      def up
        execute <<-SQL
    CREATE TABLE new_table
    (id INTEGER AUTO_INCREMENT PRIMARY KEY, ...);
    
    INSERT INTO new_table (...)
    SELECT ... FROM old_table WHERE condition;
        SQL
      end
    
      def down
        raise ActiveRecord::IrreversibleMigration
      end
    end