ActiveRecord: сделать запрос, используя модель из строки - PullRequest
2 голосов
/ 13 ноября 2010

У меня есть строка, содержащая набор моделей ActiveRecord, и я хотел бы сделать один и тот же запрос для каждой модели, переданной в виде строки.

model_type = 'Comment'
id = 1
record = model_type.find(id)

model_type = 'Post'
id = 1
record = model_type.find(id)

Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 13 ноября 2010

Вам необходимо использовать метод constantize.

model_type.constantize.find(id)

Будьте осторожны, принимая произвольные пользовательские данные и оценивая их следующим образом. Вы можете генерировать исключения для неизвестных классов.

1 голос
/ 13 ноября 2010

constantize хорошо, я раньше такого не видел. Вот как я это делал в прошлом:

@list = Kernel.const_get(@type).find_by_id_and_account_id(params[:id], current_account.id)

Я не уверен, что лучше, constantize выглядит чище:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...