0

古いサイトに i18n を追加するために globalize2 を使用しました。スペイン語のコンテンツはすでにたくさんありますが、globalize2 テーブルには保存されていません。このコンテンツをレールに移行して globalize2 に変換する方法はありますか?

問題は、保存されたコンテンツにアクセスできないことです:

>> Panel.first
=> #<Panel id: 1, name: "RT", description: "asd", proje....
>> Panel.first.name
=> nil
>> I18n.locale = nil
=> nil
>> Panel.first.name
=> nil

何か案は?

4

1 に答える 1

1

何らかの方法でこれを解決したと確信していますが、ここに行きます。read_attributeメソッドを使用して、探しているものを掘り下げることができるはずです。

以下を使用して、コンテンツをメイン テーブルから globalize2 翻訳テーブルに移行しました。

  1. translatesモデルに適切な行を追加します。
  2. に以下を配置しますconfig/initializers/globalize2_data_migration.rb

    require 'globalize'
    module Globalize
      module ActiveRecord
        module Migration
    
          def move_data_to_translation_table
            klass = self.class_name.constantize
            return unless klass.count > 0
            translated_attribute_columns = klass.first.translated_attributes.keys
            klass.all.each do |p|
              attribs = {}
              translated_attribute_columns.each { |c| attribs[c] = p.read_attribute(c) }
              p.update_attributes(attribs)
            end
          end
    
          def move_data_to_model_table
            # Find all of the translated attributes for all records in the model.
            klass = self.class_name.constantize
            return unless klass.count > 0
            all_translated_attributes = klass.all.collect{|m| m.attributes}
            all_translated_attributes.each do |translated_record|
              # Create a hash containing the translated column names and their values.
              translated_attribute_names.inject(fields_to_update={}) do |f, name|
                f.update({name.to_sym => translated_record[name.to_s]})
              end
    
              # Now, update the actual model's record with the hash.
              klass.update_all(fields_to_update, {:id => translated_record['id']})
            end
          end
        end
      end
    end
    
  3. 次の移行を作成しました。

    class TranslateAndMigratePages < ActiveRecord::Migration
      def self.up
        Page.create_translation_table!({
          :title => :string,
          :custom_title => :string,
          :meta_keywords => :string,
          :meta_description => :text,
          :browser_title => :string
        })
    
        say_with_time('Migrating Page data to translation tables') do
          Page.move_data_to_translation_table
        end
      end
    
      def self.down
        say_with_time('Moving Page translated values into main table') do
          Page.move_data_to_model_table
        end
        Page.drop_translation_table!
      end
    end
    

Globalize 3とrefinerycmsから多用。

于 2011-05-12T21:28:30.557 に答える