Выберите область на основе строки/символа без отправки

как вызвать именованную область активной записи с string и Динамический доступ к именованной области содержат информацию о том, как выбрать область на основе строка или символ, если вы хотите использовать send или public_send. Однако меня скорее беспокоят последствия использования этих методов для безопасности.

Как выбрать именованную область без использования send или public_send?


person Andrew Grimm    schedule 05.08.2015    source источник


Ответы (1)


Поскольку named_scopes являются обычными методами, AFAIK, нет другого способа динамического вызова метода по строке/символу имени в ruby.

Однако, поскольку вы беспокоитесь о безопасности, есть два варианта.

1 – Иметь частный метод для отправки фактического имени строкового метода

Это даст вашему коду возможность управлять именем метода вместо того, чтобы доверять внешней строке. Что-то типа..

#Ex: if your method name is 'all', and user sends the string 'All' 

User.send(scope_method('All'))   

private
def scope_method(name)
  {'All' : 'all'}
end

2 – Сформулируйте заявление

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

person sameera207    schedule 05.08.2015