将String转换为ActiveRecord查询

时间:2012-05-30 14:13:30

标签: ruby-on-rails ruby activerecord

我有像"User.first"这样的字符串有没有办法将该字符串转换为ActiveRecord查询:

User.first

这个字符串可以是任何东西,我想让它可执行。

2 个答案:

答案 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作为起点。