У меня есть строка, содержащая набор моделей ActiveRecord, и я хотел бы сделать один и тот же запрос для каждой модели, переданной в виде строки.
model_type = 'Comment' id = 1 record = model_type.find(id) model_type = 'Post' id = 1 record = model_type.find(id)
Как я могу это сделать?
Вам необходимо использовать метод constantize.
constantize
model_type.constantize.find(id)
Будьте осторожны, принимая произвольные пользовательские данные и оценивая их следующим образом. Вы можете генерировать исключения для неизвестных классов.
constantize хорошо, я раньше такого не видел. Вот как я это делал в прошлом:
@list = Kernel.const_get(@type).find_by_id_and_account_id(params[:id], current_account.id)
Я не уверен, что лучше, constantize выглядит чище:)