Rails is_a? (Область применения) - PullRequest
2 голосов
/ 13 февраля 2011

Я бы хотел получить параметры из запроса, а именно: model и scope

Тогда я бы хотел получить:

 eval("#{params[:model]}.#{params[:scope]}")

Но ... если delete_all будет передано в области видимости, я буду подвергаться опасности ... Поэтому я хотел бы проверить, действительно ли scope является областью действия.

Есть ли способ выполнить это? (Я использую Rails3)

1 Ответ

2 голосов
/ 13 февраля 2011

Это на самом деле не отвечает на ваш вопрос, но все же может быть полезно, если нет способа определить, является ли метод областью или нет:

Вы можете проверить полученный SQL

eval("#{params[:model]}.#{params[:scope]}.to_sql")

и проверьте наличие опасных вызовов SQL (DELETE, TRUNCATE, UPDATE, INSERT).

EDIT:

Вы также можете проверить, что область, которую вы вызываете в вашей модели, определена вэта модель, а не в родительском классе, как ActiveRecord :: Base.

model.method(scope.to_sym).owner == model

РЕДАКТИРОВАТЬ 2:

Вы также можете вызвать область на пустом наборе записей, и проверить классрезультата.Для области видимости это будет ActiveRecord :: Relation, но для delete_all это будет Fixnum:

model.where('0').scope.class == ActiveRecord::Relation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...