Как использовать «отправить» или «public_send» для имени «модели» в ruby on rails?

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я хочу использовать send или public_send для Model имени. но пока я использую send или public_send , я получаю следующую ошибку:

 send("User").all
#NoMethodError: undefined method 'User' for main:Object
  

Есть ли какой-нибудь способ справиться с этой проблемой? (даже без send или public_send ) если есть, пожалуйста, помогите мне справиться с этим.
Спасибо

Ответ №1:

вы хотите получить имя класса из строки, что-то вроде этого будет работать:

 Object.const_get("User").all
  

Это приведет к ошибке, если класс не найден:

 NameError: uninitialized constant User
  

Если вы хотите что-то, что вернет nil вместо ошибки, вы можете попробовать:

 "User".safe_constantize
  

Ответ №2:

send или public_send только для вызова метода. Если вы хотите динамически изменять имя модели, вы можете сделать что-то вроде "model_name".constantize.all