021_superclass_comments.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:4k
源码类别:

Ajax

开发平台:

Others

  1. class SuperclassComments < ActiveRecord::Migration
  2.   class BareComment < ActiveRecord::Base
  3.     include BareMigration
  4.   end
  5.   class BareContent < ActiveRecord::Base
  6.     include BareMigration
  7.     set_inheritance_column :bogustype     # see migration #20 for why
  8.   end
  9.   def self.up
  10.     STDERR.puts "Merging Comments into Contents table"
  11.     # Get our indices into a known good state.
  12.     # Mutter dark imprecations at having to do this.
  13.     #add_index(:comments, :article_id) rescue nil
  14.     #remove_index(:contents, :article_id) rescue nil
  15.     modify_tables_and_update([:add_column, BareContent, :article_id, :integer],
  16.                              [:add_column, BareContent, :email,      :string ],
  17.                              [:add_column, BareContent, :url,        :string ],
  18.                              [:add_column, BareContent, :ip,         :string ],
  19.                              [:add_index,  BareContent, :article_id          ]) do
  20.       BareContent.transaction do
  21.         if not $schema_generator
  22.           BareComment.find(:all).each do |c|
  23.             BareContent.create!(:type       => 'Comment',
  24.                                 :article_id => c.article_id,
  25.                                 :author     => c.author,
  26.                                 :email      => c.email,
  27.                                 :url        => c.url,
  28.                                 :ip         => c.ip,
  29.                                 :body       => c.body,
  30.                                 :body_html  => c.body_html,
  31.                                 :created_at => c.created_at,
  32.                                 :updated_at => c.updated_at,
  33.                                 :user_id    => c.user_id,
  34.                                 :guid       => c.guid,
  35.                                 :whiteboard => c.whiteboard)
  36.           end
  37.         end
  38.       end
  39.       remove_index(:comments, :article_id)
  40.     end
  41.     drop_table :comments
  42.   end
  43.   def self.init_comments_table(t)
  44.     t.column :article_id, :integer
  45.     t.column :title, :string
  46.     t.column :author, :string
  47.     t.column :email, :string
  48.     t.column :url, :string
  49.     t.column :ip, :string
  50.     t.column :body, :text
  51.     t.column :body_html, :text
  52.     t.column :created_at, :datetime
  53.     t.column :updated_at, :datetime
  54.     t.column :user_id, :integer
  55.     t.column :guid, :string
  56.     t.column :whiteboard, :text
  57.   end
  58.   def self.down
  59.     STDERR.puts "Recreating Comments from Contents table"
  60.     modify_tables_and_update([:create_table, BareComment, lambda {|t| self.init_comments_table(t)}],
  61.                              [:add_index,    BareComment, :article_id           ]) do
  62.       BareContent.transaction do
  63.         BareComment.transaction do
  64.           BareContent.find(:all, :conditions => "type = 'Comment'").each do |c|
  65.             BareComment.create!(:article_id => c.article_id,
  66.                                 :title      => c.title,
  67.                                 :author     => c.author,
  68.                                 :email      => c.email,
  69.                                 :url        => c.url,
  70.                                 :ip         => c.ip,
  71.                                 :body       => c.body,
  72.                                 :body_html  => c.body_html,
  73.                                 :created_at => c.created_at,
  74.                                 :updated_at => c.updated_at,
  75.                                 :user_id    => c.user_id,
  76.                                 :guid       => c.guid,
  77.                                 :whiteboard => c.whiteboard)
  78.           end
  79.           BareContent.delete_all "type = 'Comment'"
  80.         end
  81.       end
  82.       remove_index  :contents, :article_id
  83.       remove_column :contents, :article_id
  84.       remove_column :contents, :email
  85.       remove_column :contents, :url
  86.       remove_column :contents, :ip
  87.     end
  88.   end
  89. end