4

我有字符串"User.first",有什么方法可以将该字符串转换为 ActiveRecord 查询:

User.first

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

4

2 回答 2

3

你可以试试

Kernel.const_get("User").send('first')
于 2012-05-30T14:29:23.827 回答
1

kernel#eval文档:

eval(string [, binding [, filename [,lineno]]]) → obj click to toggle source

评估字符串中的 Ruby 表达式。如果给出了绑定,它必须是一个 Binding 对象,则在其上下文中执行评估。如果存在可选的 filename 和 lineno 参数,它们将在报告语法错误时使用。

但是,正如@andrew-marshall 正确指出的那样,如果您使用任何类型的未经验证的输入,这将是一个巨大的安全漏洞。有关受污染数据和 $SAFE 级别的更多信息,请参阅将 Ruby 锁定在保险箱中作为起点。

于 2012-05-30T14:51:21.863 回答