В моем проекте Rails я храню глобальные настройки в хеш-индексированном строках, где каждый класс (модель) имеет «пространство имен» для своих собственных настроек. Например, в модели новостей могут быть настройки «news.stories_per_page» или «news.show_date».Имя класса доступа из mixin
Чтобы избежать повсеместного использования имени, у меня есть mixin, который предоставляет общие методы класса для доступа к этим настройкам. С помощью этого подмешать, я мог бы получить доступ к «news.show_date» с кодом, как:
News.setting :show_date
=> true
Теперь, вот проблема. Для того, чтобы генерировать строку «news.show_date», мне нужно знать имя класса модели, которая смешивает мой модуль. Но в методе класса,
self.class
=> Class
что не очень полезно для меня. В моей наивной реализации это заставило все модели хранить свои настройки под «классом». пространство имен, что неприемлемо.
Прошу прощения за невозможность более четко сформулировать проблему. Я немного новичок в Ruby и полностью не понял его объектную модель. Проблема может иметь какое-то отношение к kludge which seems to be required in Ruby to mix in class methods.
Есть так многие способы сделать это (большинство из них отличаются для меня тем, что у вас есть). Каковы ваши жесткие требования? Должен ли у вас один хеш с использованием строк? – Phrogz
@Phrogz: жесткий и быстрый запрос. заключается в возможности сериализации объектов ruby в базу данных, к которым можно получить доступ на основе каждого класса (для каждой модели). Для этого я использую драгоценный камень «rails-settings-cached», но есть, вероятно, много способов. Я задал этот вопрос в основном потому, что хотел понять логику. – jforberg