Как я могу динамически определить, какую модель контролирует контроллер? - PullRequest
1 голос
/ 10 февраля 2010

Я пишу плагин Rails, и мне нужно иметь возможность динамически определять, с какой моделью связан контроллер. Например, если у меня есть PeopleController, мне нужен чистый способ определить, что контроллер обрабатывает модели Person.

Я просмотрел API и не нашел для него метода.

Является ли единственный способ сделать это в виде регулярного выражения в сочетании с некоторыми ActiveSupport хитростями перегиба, такими как singularize?

Если так, есть ли подводные камни при таком подходе? Какие крайние случаи?

Ответы [ 3 ]

1 голос
/ 10 февраля 2010

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

Что вы пытаетесь сделать?

0 голосов
/ 10 февраля 2010

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

# In a controller instance
klass_name = self.class.to_s.gsub(/Controller$/, '').singularize
klass = klass_name.constantize
0 голосов
/ 10 февраля 2010

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

# In a controller instance
klass = controller_name.classify.constantize
...