我有像"User.first"
这样的字符串有没有办法将该字符串转换为ActiveRecord查询:
User.first
这个字符串可以是任何东西,我想让它可执行。
答案 0 :(得分:3)
你可以试试像
Kernel.const_get("User").send('first')
答案 1 :(得分:1)
来自kernel#eval文档:
eval(string [,binding [,filename [,lineno]]])→obj单击以切换 源
以字符串形式计算Ruby表达式。如果给出了绑定,那么 必须是Binding对象,评估在其上下文中执行。 如果存在可选的filename和lineno参数,它们将会出现 在报告语法错误时使用。
然而,正如@ andrew-marshall正确指出的那样,如果您使用任何类型的未经验证的输入,这将是一个巨大的安全漏洞。有关受污染数据和$ SAFE级别的更多信息,请参阅Locking Ruby in the Safe作为起点。