Использование ActiveRecord с таблицей пар ключ / значение - PullRequest
2 голосов
/ 06 октября 2011

У меня есть существующая таблица из сторонней базы данных, в которую я подключаюсь, в которой хранятся пары ключ / значение. Два столбца, один для «param» и другой для «paramvalue». Мне нужно получить доступ к этим сохраненным значениям для приложения-плагина, которое я разрабатываю, и я пытаюсь придумать лучший способ получить значения в простейшем формате, который можно использовать во всем приложении. То, о чем я думал, так или иначе строило динамические методы в модели AR, которую я мог вызвать на основе имени параметра. Что-то вроде SysParams.base_url, которое будет отображаться в записи для [base_url, http://www.thesite.com]. Вроде как встроенные методы AR для таких вещей, как Record.find_by_column_name

Главный вопрос: возможно ли что-то подобное? Если так, это хорошая идея? Если так, как бы это было?

1 Ответ

1 голос
/ 13 октября 2011

Вот как я справляюсь с такими вещами, но это хорошая идея, если количество ключей не слишком велико.

1.Создайте модель для доступа к вашей БД следующим образом:

приложение / модели / config_table.rb

class ConfigTable < ActiveRecord::Base
  # whatever you need here
end

2.Создать инициализатор

конфиг / Инициализаторы / admin_config.rb

class AdminConfig
  # uncomment this if in development
  #unloadable

  # I assume you have the fields key/value in your 
  # ConfigTable you may need to change this

  def self.all
    # create a cached hash
    @cache ||= ConfigTable.all.inject({}) do |hsh, c_config|
      hsh[c_config.key.to_sym] = c_config.value
      hsh
    end
  end 

  def self.get(key)
    self.all[key.to_sym]
  end

  def self.[](key)
    self.all[key.to_sym]
  end
end

Примеры использования (в любом месте вашего приложения):

AdminConfig.get(:hostname)
AdminConfig.get('hostname')
AdminConfig[:hostname]
AdminConfig['hostname']

Если вам необходимо перезагрузить вашу Конфигурацию из-за изменений, вам придется перезапустить все запущенные экземпляры приложения. Возможно, вам придется изменить наименования таблицы / столбцов, конечно:)

Если вам нужно решение для больших наборов ключей / значений, я рекомендую вам сохранить его в кеше Rails и, возможно, использовать redis-store:)

Веселись

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