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

Ajax

开发平台:

Others

  1. class SuperclassTrackbacks < ActiveRecord::Migration
  2.   class BareContent < ActiveRecord::Base
  3.     include BareMigration
  4.     set_inheritance_column :bogustype     # see migration #20 for why
  5.   end
  6.   class BareTrackback < ActiveRecord::Base
  7.     include BareMigration
  8.   end
  9.   def self.up
  10.     STDERR.puts "Merging Trackbacks into Content table"
  11.     # Ensure that the index we're going to remove in the transaction
  12.     # is actually there (otherwise Postgres breaks)
  13.     # Comment because already in migration 001
  14.     #add_index(:trackbacks, :article_id) rescue nil
  15.     modify_tables_and_update([:add_column,   BareContent,   :blog_name, :string],
  16.                              [:remove_index, BareTrackback, :article_id        ]) do
  17.       BareContent.transaction do
  18.         if not $schema_generator
  19.           BareTrackback.find(:all).each do |tb|
  20.             a = BareContent.find(tb.article_id)
  21.             BareContent.create(:type       => 'Trackback',
  22.                                :article_id => tb.article_id,
  23.                                :blog_name  => tb.blog_name,
  24.                                :title      => tb.title,
  25.                                :excerpt    => tb.excerpt,
  26.                                :url        => tb.url,
  27.                                :ip         => tb.ip,
  28.                                :created_at => tb.created_at,
  29.                                :updated_at => tb.updated_at,
  30.                                :guid       => tb.guid)
  31.           end
  32.         end
  33.       end
  34.     end
  35.     drop_table :trackbacks
  36.   end
  37.   def self.transactions_init(t)
  38.     t.column :article_id, :integer
  39.     t.column :blog_name, :string
  40.     t.column :title, :string
  41.     t.column :excerpt, :string
  42.     t.column :url, :string
  43.     t.column :ip, :string
  44.     t.column :created_at, :datetime
  45.     t.column :updated_at, :datetime
  46.     t.column :guid, :string
  47.   end
  48.   def self.down
  49.     STDOUT.puts "Recreating Trackbacks from Contents table"
  50.     modify_tables_and_update([:create_table, :trackbacks, lambda {|t| transactions_init(t)}],
  51.                              [:add_index,    :trackbacks, :article_id]) do
  52.       BareContent.transaction do
  53.         BareContent.find(:all, :conditions => ["type = ?", 'Trackback']).each do |tb|
  54.           BareTrackback.create(:article_id => tb.article_id,
  55.                                :blog_name  => tb.blog_name,
  56.                                :title      => tb.title,
  57.                                :excerpt    => tb.excerpt,
  58.                                :url        => tb.url,
  59.                                :ip         => tb.ip,
  60.                                :created_at => tb.created_at,
  61.                                :updated_at => tb.updated_at,
  62.                                :guid       => tb.guid)
  63.         end
  64.         BareContent.delete_all("type = 'Trackback'")
  65.       end
  66.     end
  67.     remove_column :contents, :blog_name
  68.   end
  69. end