Rails I18n через колонку базы данных - PullRequest
4 голосов
/ 15 июля 2011

У меня есть устаревшая таблица базы данных, в которой есть столбцы name_en и name_es, и мне было интересно, каким будет лучший способ запроса в ActiveRecord для любого перевода, основанного на предпочтении пользователя i18n.В Rails больше говорится о хранении переводов в отдельном хеше или таблице, но я не хочу менять структуру базы данных.

В настоящее время в старом приложении PHP я отправляю аргумент в запрос mysqlзаменить имя_ lang и вернуть name_en или name_es AS name для отображения при вызове идентификатора строки.

1 Ответ

12 голосов
/ 15 июля 2011

Вы должны создать инициализатор, в который вы поместите:

class ActiveRecord::Base
  def self.has_translation(*attributes)    
    attributes.each do |attribute|
      define_method "#{attribute}" do
        self.send "#{attribute}_#{I18n.locale}"
      end
    end
  end
end

Тогда в ваших моделях:

has_translation :name, :whatever

Чтобы он автоматически вызывал правильное имя столбца в зависимости от вашей текущей локали. На ваш взгляд:

@variable.name # calling @variable.name_en if locale = :en
               #         @variable.name_es if locale = :es

Конечно, я предположил, что уже не существует таблицы с именем name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...