send
或public_send
,则how to call a active record named scope with a string和Access named scope dynamically会提供有关如何根据字符串或符号选择范围的信息。然而,我更关心使用这些方法的安全隐患。
如何在不使用send
或public_send
?
答案 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 - 有个案陈述
取决于用户字符串,但这可能会很快非常难看