我已经使用globalize2将i18n添加到一个旧站点。西班牙语中已经有很多内容,但是并没有存储在globalize2表中。有没有办法通过在rails中的迁移将这些内容转换成globalize2?
问题是我无法访问存储的内容:
>> Panel.first
=> #<Panel id: 1, name: "RT", description: "asd", proje....
>> Panel.first.name
=> nil
>> I18n.locale = nil
=> nil
>> Panel.first.name
=> nil有什么想法吗?
发布于 2011-05-13 05:28:31
我相信你已经以某种方式解决了这个问题,但现在开始吧。您应该能够使用read_attribute方法来挖掘出您正在寻找的内容。
我刚刚使用以下代码将主表中的内容迁移到globalize2 translations表中。
translates行添加到模型中。config/initializers/globalize2_data_migration.rb中放置以下内容:除非klass.count >0 translated_attribute_columns = klass.first.translated_attributes.keys klass.all.each do |p| attribs = {} translated_attribute_columns.each { |c| attribsc = p.read_attribute(c) },否则需要' Globalize‘模块Globalize模块ActiveRecord模块迁移def move_data_to_translation_table klass = self.class_name.constantize returnp.update_attributes(attribs) end end def move_data_to_model_table #查找模型中所有记录的所有转换后的属性。klass = self.class_name.constantize除非klass.count >0返回all_translated_attributes = klass.all.collect{|m| m.attributes} all_translated_attributes.each do |translated_record| #创建一个包含翻译后的列名及其值的散列。translated_attribute_names.inject(fields_to_update={}) do |f,name| f.update({name.to_sym => translated_recordname.to_s}) end #现在,使用散列更新实际模型的记录。klass.update_all(fields_to_update,{:id => translated_record'id'}) end
类TranslateAndMigratePages < ActiveRecord::Migration def self.up Page.create_translation_table!({ :title => :string,:custom_title => :string,:meta_keywords => :string,:meta_description => :text,:browser_title =>:say_with_time }) say_with_time('Migrating Page data to translation‘) do Page.move_data_to_translation_table end def self.down say_with_time('Moving Page translated values to main table') do Page.move_data_to_model_table end Page.drop_translation_table!end end
大量借鉴Globalize 3和refinerycms。
https://stackoverflow.com/questions/2995549
复制相似问题