根据 string/symbol 选择范围而不发送

Choose scope based on string/symbol without send

如果您愿意使用 sendpublic_send

how to call a active record named scope with a string and Access named scope dynamically 提供有关如何根据字符串或符号选择范围的信息。但是,我很担心使用这些方法的安全隐患。

如何在不使用 sendpublic_send 的情况下选择命名范围?

因为 named_scopes 是普通方法,据我所知,没有其他方法可以在 ruby 中通过名称 string/symbol 动态调用方法。

但是,由于您担心安全问题,因此有两种选择。

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 - 有一个案例陈述

取决于用户字符串,但这可能 很快就会变得很丑陋