2009-10-02 3 views

ответ

7
str_modelname.classify.constantize.find(:first) 
+0

Это довольно удивительно ... +1 – Twisol

+0

Хотя это решение красивее, чем тот, который я предоставил, я по-прежнему защищаю мои, поскольку он позволяет вам ограничить набор классов, для которых вы можете его использовать. Кроме того, обратите внимание, что вы не проверяете NameError и NoMethodError в случае неправильного ввода. – giorgian

+0

Однако это отвечает на вопрос. Затем разработчик должен применять любые охранники, требуемые приложением. – Damian

1

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

str = "User" 
p Kernel.const_get(str).find(:first) 

Я основывал это на this technique.

+0

вопрос в том, откуда взялась строка? если это от пользователя, это может быть небезопасно ... – giorgian

+0

Кажется, что проблема связана с вопросом, а не с этим конкретным решением. – Twisol

2

Есть несколько способов, один из которых может быть с помощью хэш, как:

models = {"User" => User, "AnotherModel" => AnotherModel} 

А потом:

models[name] ? models[name].find(:first) : nil 

Зачем вам это нужно? Там могут быть лучшие решения, в зависимости от того, что вам нужно делать.

Смежные вопросы