Skip to content

Instantly share code, notes, and snippets.

@robyurkowski
Created September 1, 2011 05:19
Show Gist options
  • Save robyurkowski/1185498 to your computer and use it in GitHub Desktop.
Save robyurkowski/1185498 to your computer and use it in GitHub Desktop.
Funky Times with Globalize3
class AddTranslationTableToBlog < ActiveRecord::Migration
def self.up
BlogPost.create_translation_table!({
:title => :string,
:body => :text,
:custom_teaser => :text
}, :migrate_data => true)
# Not sure if needed... thought maybe might prevent it from squawking...
::BlogPost::Translation.module_eval do
is_seo_meta
end
::SeoMetum.update_all :seo_meta_type => 'BlogPost::Translation', :seo_meta_type => 'BlogPost'
remove_column :blog_posts, :title
remove_column :blog_posts, :body
remove_column :blog_posts, :custom_teaser
BlogCategory.create_translation_table!({
:title => :string
}, :migrate_data => true)
remove_column :blog_categories, :title
end
def self.down
# ...
end
end
== AddTranslationTableToBlog: migrating ======================================
rake aborted!
An error has occurred, this and all later migrations canceled:
Bad field type for field :custom_title (nil), should be :string or :text
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/globalize3-0.1.0/lib/globalize/active_record/migration.rb:101:in `block in validate_translated_fields'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/globalize3-0.1.0/lib/globalize/active_record/migration.rb:99:in `each'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/globalize3-0.1.0/lib/globalize/active_record/migration.rb:99:in `validate_translated_fields'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/globalize3-0.1.0/lib/globalize/active_record/migration.rb:29:in `create_translation_table!'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/globalize3-0.1.0/lib/globalize/active_record/migration.rb:12:in `create_translation_table!'
/Users/rob/Sites/alum/db/migrate/20110830150947_add_translation_table_to_blog.rb:4:in `up'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:314:in `block in migrate'
/Users/rob/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/benchmark.rb:295:in `measure'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:314:in `migrate'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:397:in `migrate'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:539:in `block (2 levels) in migrate'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:613:in `call'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:613:in `block in ddl_transaction'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/transactions.rb:207:in `transaction'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:613:in `ddl_transaction'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:538:in `block in migrate'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:525:in `each'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:525:in `migrate'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:435:in `up'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/migration.rb:417:in `migrate'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/railties/databases.rake:142:in `block (2 levels) in <top (required)>'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:636:in `block in execute'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:597:in `block in invoke_with_call_chain'
/Users/rob/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2029:in `block (2 levels) in top_level'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2029:in `block in top_level'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/airbrake-3.0.rc2/lib/airbrake/rake_handler.rb:32:in `standard_exception_handling'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2001:in `block in run'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.8.7/bin/rake:31:in `<top (required)>'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/bin/rake:19:in `load'
/Users/rob/.rvm/gems/ruby-1.9.2-p290/bin/rake:19:in `<main>'
class BlogPost < ActiveRecord::Base
if self.respond_to?(:translates)
translates :title, :body, :custom_teaser, :custom_title, :meta_keywords, :meta_description, :include => :seo_meta
# Set up support for meta tags through translations.
if defined?(::BlogPost::Translation)
if ::BlogPost::Translation.table_exists?
def translation
if @translation.nil? or @translation.try(:locale) != ::Globalize.locale
@translation = translations.with_locale(::Globalize.locale).first
@translation ||= translations.build(:locale => ::Globalize.locale)
end
@translation
end
# Instruct the Translation model to have meta tags.
::BlogPost::Translation.send :is_seo_meta
fields = ::SeoMeta.attributes.keys.reject{|f|
self.column_names.map(&:to_sym).include?(f)
}.map{|a| [a, :"#{a}="]}.flatten
delegate *(fields << {:to => :translation})
after_save proc {|m| m.translation.save}
before_create :ensure_locale, :if => proc { |c|
::Refinery.i18n_enabled?
}
end
end
end
# ...
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment