blob: cb8c268b08d1363ccf0f4eb5dec0614d56069403 (
plain) (
tree)
|
|
class CreateSeoMeta < ActiveRecord::Migration
def self.up
create_table :seo_meta do |t|
t.integer :seo_meta_id
t.string :seo_meta_type
t.string :browser_title
t.string :meta_keywords
t.text :meta_description
t.timestamps
end
add_index :seo_meta, :id
add_index :seo_meta, [:seo_meta_id, :seo_meta_type]
# Grab the attributes of the records that currently exist
existing_translations = ::Refinery::Page.translation_class.all.map(&:attributes)
# Remove columns
::SeoMeta.attributes.keys.each do |field|
if ::Refinery::Page.translation_class.column_names.map(&:to_sym).include?(field)
remove_column ::Refinery::Page.translation_class.table_name, field
end
end
# Reset column information because otherwise the old columns will still exist.
::Refinery::Page.translation_class.reset_column_information
# Re-attach seo_meta
::Refinery::Page.translation_class.send :is_seo_meta
# Migrate data
existing_translations.each do |translation|
::Refinery::Page.translation_class.find(translation['id']).update_attributes(
::SeoMeta.attributes.keys.inject({}) {|attributes, name|
attributes.merge(name => translation[name.to_s])
}
)
end
# Reset column information again because otherwise the old columns will still exist.
::Refinery::Page.reset_column_information
end
def self.down
# Grab the attributes of the records that currently exist
existing_translations = ::Refinery::Page.translation_class.all.map(&:attributes)
# Add columns back to your model
::Refinery::SeoMeta.attributes.each do |field, field_type|
unless ::Refinery::Page.translation_class.column_names.map(&:to_sym).include?(field)
add_column ::Refinery::Page.translation_class.table_name, field, field_type
end
end
# Reset column information because otherwise the new columns won't exist yet.
::Refinery::Page.translation_class.reset_column_information
# Migrate data
existing_translations.each do |translation|
::Refinery::Page.translation_class.update_all(
::Refinery::SeoMeta.attributes.keys.inject({}) {|attributes, name|
attributes.merge(name => translation[name.to_s])
}, :id => translation['id']
)
end
::Refinery::SeoMeta.attributes.keys.each do |k|
::Refinery::Page.translation_class.module_eval %{
def #{k}
end
def #{k}=(*args)
end
}
end
# Reset column information again because otherwise the old columns will still exist.
::Refinery::Page.reset_column_information
drop_table :seo_meta
end
end
|