根据 string/symbol 选择范围而不发送
Choose scope based on string/symbol without send
如果您愿意使用 send
或 public_send
,how to call a active record named scope with a string and Access named scope dynamically 提供有关如何根据字符串或符号选择范围的信息。但是,我很担心使用这些方法的安全隐患。
如何在不使用 send
或 public_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 - 有一个案例陈述
取决于用户字符串,但这可能 很快就会变得很丑陋
send
或 public_send
,how to call a active record named scope with a string and Access named scope dynamically 提供有关如何根据字符串或符号选择范围的信息。但是,我很担心使用这些方法的安全隐患。
如何在不使用 send
或 public_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 - 有一个案例陈述
取决于用户字符串,但这可能 很快就会变得很丑陋