我有字符串"User.first"
,有什么方法可以将该字符串转换为 ActiveRecord 查询:
User.first
这个字符串可以是任何东西,我想让它可执行。
我有字符串"User.first"
,有什么方法可以将该字符串转换为 ActiveRecord 查询:
User.first
这个字符串可以是任何东西,我想让它可执行。
你可以试试
Kernel.const_get("User").send('first')
从kernel#eval文档:
eval(string [, binding [, filename [,lineno]]]) → obj click to toggle source
评估字符串中的 Ruby 表达式。如果给出了绑定,它必须是一个 Binding 对象,则在其上下文中执行评估。如果存在可选的 filename 和 lineno 参数,它们将在报告语法错误时使用。
但是,正如@andrew-marshall 正确指出的那样,如果您使用任何类型的未经验证的输入,这将是一个巨大的安全漏洞。有关受污染数据和 $SAFE 级别的更多信息,请参阅将 Ruby 锁定在保险箱中作为起点。