, напримеррельсы - как обратиться к модели через строку?
str_modelname="User"
и я хотел бы сделать
str_modelname.find(:first)
найти первый пользователь, но он не работает так, конечно
, напримеррельсы - как обратиться к модели через строку?
str_modelname="User"
и я хотел бы сделать
str_modelname.find(:first)
найти первый пользователь, но он не работает так, конечно
str_modelname.classify.constantize.find(:first)
Я с успехом с этот фрагмент кода, но я не буду утверждать, что это лучший способ:
str = "User"
p Kernel.const_get(str).find(:first)
Я основывал это на this technique.
Есть несколько способов, один из которых может быть с помощью хэш, как:
models = {"User" => User, "AnotherModel" => AnotherModel}
А потом:
models[name] ? models[name].find(:first) : nil
Зачем вам это нужно? Там могут быть лучшие решения, в зависимости от того, что вам нужно делать.
Это довольно удивительно ... +1 – Twisol
Хотя это решение красивее, чем тот, который я предоставил, я по-прежнему защищаю мои, поскольку он позволяет вам ограничить набор классов, для которых вы можете его использовать. Кроме того, обратите внимание, что вы не проверяете NameError и NoMethodError в случае неправильного ввода. – giorgian
Однако это отвечает на вопрос. Затем разработчик должен применять любые охранники, требуемые приложением. – Damian