как загрузить модель с пользовательским именем в контроллер - PullRequest
0 голосов
/ 19 июля 2010

Я пытаюсь получить доступ к модели для глобальных настроек системы. Он должен быть загружен почти в каждом контроллере. Проблема в том, что я не могу найти помощь в получении рельсов для загрузки дамбы.

Если это помогает, модель называется Config и имеет два столбца; «ключ» и «значение»

Я пришел из PHP. Я помню, codeigniter мог загружать модели через.

$this->load->model('a_model_name');

Контроллеры, в которые я пытаюсь загрузить модель, не имеют того же имени, что и модель.

Ответы [ 4 ]

2 голосов
/ 19 июля 2010

Проблема здесь - это собственно название модели.Config используется другими классами Rails - см. Список зарезервированных имен на вики Rails

1 голос
/ 19 июля 2010

Вы можете добавить before_filter в ApplicationController:

before_filter :load_config

...
private
def load_config
  something
end

По умолчанию все контроллеры в Rails наследуются от ApplicationController, поэтому все контроллеры будут выполнять метод load_config в начале.

Кстати, мне действительно нравится rails-settings гем / плагин для конфигурации. Это, вероятно, то, что вам нужно. И он загружает данные, когда это необходимо, поэтому вам не нужно загружать конфигурацию в каждом контроллере, а просто когда вам нужно какое-то значение, тогда вы просто делаете:

Settings.key

и вы получаете то, что хотите.

1 голос
/ 19 июля 2010

Rails автоматически загружает классы, когда они им нужны.Пока класс находится в файле с тем же именем и находится в одном из каталогов, в котором Rails ищет классы, вы просто используете класс, как если бы он был загружен, и Rails загрузит его автоматически

0 голосов
/ 19 июля 2010

Предположительно, если вы хотите загрузить часть информации определенным ключом, вы можете использовать Config.find_by_key('the_key_you_want') для получения рассматриваемой записи.

Я не уверен, что это был бы лучший способ управлять вашей конфигурацией, но это действительно зависит от того, как ваша система должна работать.

EDIT:

Не видел вашего обновления к вопросу до того, как я опубликовал свой ответ, похоже, я неправильно понял, что вы имели в виду. Оставляя этот ответ здесь, если он полезен, ответ Гарета кажется честным.

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