Ruby on Rails:迁移:如何将表合并到新表中?

发布于 2024-09-10 19:07:09 字数 225 浏览 4 评论 0原文

我有两张桌子 附件:

name, doc_name, doc_type, doc_size, cat

和媒体:

name, doc_name, doc_type, doc_size, cat

如何编写迁移文件,以便它获取两个表中的所有条目并将它们放入新的 Files 表中?

i have two tables
attachments:

name, doc_name, doc_type, doc_size, cat

and media:

name, doc_name, doc_type, doc_size, cat

how do I write a migration file such that it takes all the entries from both tables and puts them into a new Files table?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淡淡の花香 2024-09-17 19:07:09
class MergeAttachmentsMediaToFiles < ActiveRecord::Migration
  def self.up
    create_table :files do |t|
      t.column :name, :string
      # ...
    end

    Attachment.find(:all).each do |attachment|
      File.create(:name => attachment.name,
                  :doc_name => attachment.doc_name,
                  :doc_type => attachment.doc_type,
                  :doc_size => attachment.doc_size,
                  :cat => attachment.cat)
    end

    # do similar for Media
  end


end
class MergeAttachmentsMediaToFiles < ActiveRecord::Migration
  def self.up
    create_table :files do |t|
      t.column :name, :string
      # ...
    end

    Attachment.find(:all).each do |attachment|
      File.create(:name => attachment.name,
                  :doc_name => attachment.doc_name,
                  :doc_type => attachment.doc_type,
                  :doc_size => attachment.doc_size,
                  :cat => attachment.cat)
    end

    # do similar for Media
  end


end
听风念你 2024-09-17 19:07:09

我主要使用 SQL 来完成此任务。对您的数据类型做出一些假设:

class CreateFiles < ActiveRecord::Migration

 def self.up
  create_table :files do |t|
   t.string :name
   t.string :doc_name
   t.string :doc_type
   t.integer :doc_size
   t.string :cat
  end

  execute ("insert into files select * from attachments");
  execute ("insert into files select * from media");
 end

 def self.down
  drop_table :files
 end

end

I would accomplish this primarily with SQL. Making some assumptions about your data types:

class CreateFiles < ActiveRecord::Migration

 def self.up
  create_table :files do |t|
   t.string :name
   t.string :doc_name
   t.string :doc_type
   t.integer :doc_size
   t.string :cat
  end

  execute ("insert into files select * from attachments");
  execute ("insert into files select * from media");
 end

 def self.down
  drop_table :files
 end

end
十雾 2024-09-17 19:07:09

我知道 SQL 可以做到这一点。

    def self.up
          create_table :files do |t|
            t.string  :name
            t.string  :doc_name
            t.string  :doc_type
            t.string  :doc_size
            t.string :cat
          end

          execute "INSERT INTO create_table(name, doc_name, doc_type, doc_size, cat)
                   SELECT name, doc_name, doc_type, doc_size, cat FROM attachments
                   UNION
                   SELECT name, doc_name, doc_type, doc_size, cat FROM media"

          drop_table :attachments
          drop_table :media
end

未经测试但应该可以工作。

I know the SQL to do it.

    def self.up
          create_table :files do |t|
            t.string  :name
            t.string  :doc_name
            t.string  :doc_type
            t.string  :doc_size
            t.string :cat
          end

          execute "INSERT INTO create_table(name, doc_name, doc_type, doc_size, cat)
                   SELECT name, doc_name, doc_type, doc_size, cat FROM attachments
                   UNION
                   SELECT name, doc_name, doc_type, doc_size, cat FROM media"

          drop_table :attachments
          drop_table :media
end

Not tested but should work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文