Ссылка на модель со строковым вводом - PullRequest
10 голосов
/ 27 февраля 2012

Допустим, я хочу создать страницу, которая может запрашивать нужный объект с типом (string) и id (int).

/ запрос? Тип = люди & ID = 1

доставит меня

Person.find (1)

тогда

/ запроса? Тип = город и идентификатор = 123

достанет меня

* * City.find тысячи двадцать-одина (123) * * тысяча двадцать две

Однако у меня возникают проблемы с переводом строк в нужный класс модели.

Единственное, о чем я могу думать, это

case params[:type]
 when 'people'
  @object = Person.find(params[:id])
 when 'cities'
  @object = City.find(params[:id])
end

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

Есть ли лучший способ?

Заранее спасибо,

1 Ответ

39 голосов
/ 27 февраля 2012

Попробуйте:

klass = params[:type]
klass.singularize.classify.constantize.find(params[:id])

Edit:

@object = params[:type].singularize.classify.constantize.find(params[:id])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...