Globalize2, отключить откат для определенного поля

Я использую globalize2 в проекте Rails2 для управления интернационализацией. У меня есть модель страницы с заголовком, описанием и так далее.

Я использую поле с именем "url_redirect", которое используется для перенаправления страницы на другой URL, в зависимости от языка, который я сейчас использую. Например:

Page.find(1)

title    description locale  url_redirect
test        ....       it
my_test     ....       en    www.google.it

На стороне контроллера я проверяю наличие url_redirect и делаю простой redirect_to, если он не указан. К сожалению, я использую запасные варианты globalize2... поэтому, хотя я нахожусь на итальянском сайте, поле url_redirect возвращает www.google.it.. Это запасные варианты:

require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
module Globalize

  class << self

    def fallbacks(locale = self.locale)
      case locale
      when :it then [:it, :en, :es, :fr]
      when :en then [:en, :it, :es, :fr]
      when :es then [:es, :en, :it, :fr]
      when :fr then [:fr, :it, :en, :es]
      end
    end

  end
end

Как я могу избежать отступления только для этой конкретной области? Я хотел бы что-то вроде этого Как избежать Globalize3 от возврата резервных переводов для атрибута в конкретном контексте? для глобализации2.

Заранее спасибо.

1 ответ

Не очень удачное решение, но наконец я решил свою проблему с помощью этого трюка:

module Globalize
      module ActiveRecord
        class Adapter

          protected

            def fetch_attribute(locale, attr_name)
              translations = fetch_translations(locale)
              value, requested_locale = nil, locale

              Globalize.fallbacks(locale).each do |fallback|
                if attr_name == :url_redirect
                  translation = translations.detect { |t| t.locale == locale }
                else
                  translation = translations.detect { |t| t.locale == fallback }
                end
                value  = translation && translation.send(attr_name)
                locale = fallback && break if value
              end

              set_metadata(value, :locale => locale, :requested_locale => requested_locale)
              value
            end

        end
      end
end

используя простой инициализатор. Все еще ищу лучшее решение.

Другие вопросы по тегам