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

Ajax

开发平台:

Others

  1. class Bare20Article < ActiveRecord::Base
  2.   include BareMigration
  3.   # need to point the primary key somewhere else so we can manually
  4.   # set this field for each article.
  5.   #set_primary_key :boguskey
  6. end
  7. class Bare20Content < ActiveRecord::Base
  8.   include BareMigration
  9. # From active_record/base.rb: "the primary key and inheritance column can
  10. # never be set by mass-assignment for security reasons."  Because this
  11. # script wants to set 'id' and 'type', we need to fool activerecord by
  12. # setting them to bogus values.
  13.   set_inheritance_column :bogustype
  14.   #set_primary_key :boguskey
  15. end
  16. class SuperclassArticles < ActiveRecord::Migration
  17.   def self.config
  18.     ActiveRecord::Base.configurations
  19.   end
  20.   def self.up
  21.     STDERR.puts "Merging Articles into Contents table"
  22.     # Make sure our index is in a known state
  23.     # Comment because in migration 001, there are already a creation of this index
  24.     #add_index :articles, :permalink rescue nil
  25.     Bare20Article.transaction do
  26.       create_table :contents do |t|
  27. #       ActiveRecord::Base.connection.send(:create_table, [:contents]) do |t|
  28.         t.column :type, :string
  29.         t.column :title, :string
  30.         t.column :author, :string
  31.         t.column :body, :text
  32.         t.column :body_html, :text
  33.         t.column :extended, :text
  34.         t.column :excerpt, :text
  35.         t.column :keywords, :string
  36.         t.column :allow_comments, :integer
  37.         t.column :allow_pings, :integer
  38.         t.column :published, :integer, :default => 1
  39.         t.column :created_at, :datetime
  40.         t.column :updated_at, :datetime
  41.         t.column :extended_html, :text
  42.         t.column :user_id, :integer
  43.         t.column :permalink, :string
  44.         t.column :guid, :string
  45.         t.column :text_filter_id, :integer
  46.         t.column :whiteboard, :text
  47.       end
  48.       if config[RAILS_ENV]['adapter'] == 'postgresql'
  49.         execute "select nextval('contents_id_seq')"
  50.       end
  51.       if not $schema_generator
  52.         Bare20Article.find(:all).each do |a|
  53.           t = Bare20Content.new(
  54.             :type => 'Article',
  55.             :title => a.title,
  56.             :author => a.author,
  57.             :body => a.body,
  58.             :body_html => a.body_html,
  59.             :extended => a.extended,
  60.             :excerpt => a.excerpt,
  61.             :keywords => a.keywords,
  62.             :allow_comments => a.allow_comments,
  63.             :allow_pings => a.allow_pings,
  64.             :published => a.published,
  65.             :created_at => a.created_at,
  66.             :updated_at => a.updated_at,
  67.             :extended_html => a.extended_html,
  68.             :user_id => a.user_id,
  69.             :permalink => a.permalink,
  70.             :guid => a.guid,
  71.             :text_filter_id => a.text_filter_id,
  72.             :whiteboard => a.whiteboard)
  73.           # can't use id accessor because it uses the bogus primary key
  74.           t.send(:write_attribute, :id, a.send(:read_attribute, :id))
  75.           t.save!
  76.         end
  77.         if config[RAILS_ENV]['adapter'] == 'postgresql'
  78.           STDERR.puts "Resetting PostgreSQL sequences"
  79.           execute "select setval('contents_id_seq',max(id)) from contents"
  80.           execute "select nextval('contents_id_seq')"
  81.         end
  82.       end
  83.       remove_index :articles, :permalink
  84.       drop_table :articles
  85.     end
  86.   end
  87.   def self.down
  88.     Bare20Content.transaction do
  89.       STDERR.puts "Recreating Articles from Contents table."
  90.       create_table :articles do |t|
  91.         t.column :title, :string
  92.         t.column :author, :string
  93.         t.column :body, :text
  94.         t.column :body_html, :text
  95.         t.column :extended, :text
  96.         t.column :excerpt, :text
  97.         t.column :keywords, :string
  98.         t.column :allow_comments, :integer
  99.         t.column :allow_pings, :integer
  100.         t.column :published, :integer, :default => 1
  101.         t.column :created_at, :datetime
  102.         t.column :updated_at, :datetime
  103.         t.column :extended_html, :text
  104.         t.column :user_id, :integer
  105.         t.column :permalink, :string
  106.         t.column :guid, :string
  107.         t.column :text_filter_id, :integer
  108.         t.column :whiteboard, :text
  109.       end
  110.       if config[RAILS_ENV]['adapter'] == 'postgresql'
  111.         execute "select nextval('articles_id_seq')"
  112.       end
  113.       add_index :articles, :permalink
  114.       if not $schema_generator
  115.         Bare20Content.find(:all, :conditions => "type = 'Article'").each do |a|
  116.           t = Bare20Article.new(
  117.              :title => a.title,
  118.              :author => a.author,
  119.              :body => a.body,
  120.              :body_html => a.body_html,
  121.              :extended => a.extended,
  122.              :excerpt => a.excerpt,
  123.              :keywords => a.keywords,
  124.              :allow_comments => a.allow_comments,
  125.              :allow_pings => a.allow_pings,
  126.              :published => a.published,
  127.              :created_at => a.created_at,
  128.              :updated_at => a.updated_at,
  129.              :extended_html => a.extended_html,
  130.              :user_id => a.user_id,
  131.              :permalink => a.permalink,
  132.              :guid => a.guid,
  133.              :text_filter_id => a.text_filter_id,
  134.              :whiteboard => a.whiteboard)
  135.            # can't use id accessor because it uses the bogus primary key
  136.            t.send(:write_attribute, :id, a.send(:read_attribute, :id))
  137.            t.save!
  138.         end
  139.         if config[RAILS_ENV]['adapter'] == 'postgres'
  140.           STDERR.puts "Resetting PostgreSQL sequences"
  141.           execute "select setval('articles_id_seq',max(id)+1) from articles"
  142.         end
  143.       end
  144.       # script 21 saved the comments, this script saved the articles.
  145.       drop_table :contents
  146.     end
  147.   end
  148. end