根据字符串/符号选择范围而不发送

时间:2015-08-05 03:32:43

标签: ruby-on-rails named-scope

如果您愿意使用sendpublic_send,则

how to call a active record named scope with a stringAccess named scope dynamically会提供有关如何根据字符串或符号选择范围的信息。然而,我更关心使用这些方法的安全隐患。

如何在不使用sendpublic_send

的情况下选择命名范围

1 个答案:

答案 0 :(得分: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 - 有个案陈述

取决于用户字符串,但这可能会很快非常难看