Доминирующим соглашением для хранения редактируемых настроек всего приложения является концепция хранилища значений ключей, поддерживаемая либо ActiveRecord, либо другими механизмами. И, насколько я знаю, есть по крайней мере две хороших стратегии для хранения настроек всего приложения в зависимости от ваших реквизитов.
Если вам нужен универсальный подход, но чрезвычайно гибкий для определения пары (не) настроек области действия, которые могут быть связаны с AR-моделями, у вас есть Rails-Settings (или его кэшированная версия * 1005). * Рельсы-Настройка-Cached ). Я не пробовал использовать плагин в Rails 3.1, но он хорошо работает на 3.0. Это позволяет вам иметь такие вещи, как:
Settings.main_color = '#3333CC'
Settings.logo_file_name = 'images/logo.png'
Setting['preferences.color'] = :blue
Если вам нужен надежный подход, с наследованием одной таблицы и позволяющий вам выполнять проверки в определенных настройках, как это было бы с реальными записями AR, у вас есть хорошая статья , написанная Джеффом Дином , который шаг за шагом через весь процесс. Таким образом вы ограничиваете настройки, группируя их в подклассы, и у вас могут быть такие вещи:
class ApplicationSettings::PageLayout < ApplicationSetting
validates :title, :presence => true
...
def title
value
end
def title=(value)
self.value = value
end
И я полагаю, что при некоторой простой настройке вы даже можете иметь ассоциации has_many
и belongs_to
в некоторых ваших настройках (например, список телефонных номеров или сообщений электронной почты переменного размера).
Лично я предпочитаю последний подход (когда настройки имеют большое значение), потому что он дает вам больший контроль над настройками, которые вы сохраняете, и сохраняет ваш код чистым и СУХИМЫМ, позволяя вам следовать шаблону MVC.