Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将字符串转换为XXX_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 将字符串转换为XXX

Ruby on rails 将字符串转换为XXX,ruby-on-rails,ruby,Ruby On Rails,Ruby,在这方面,我可以做到: User.where{id.eq "2" | admin.eq true} 质疑。我想知道我是否可以转换一个字符串,这是一个如下条件: string = "id: 2" 或 并运行: User.where{string} 或 结果不是散列。我该怎么做呢?您需要的是散列,而不是字符串。你可以这样使用它 hash = {id: 2} User.where(hash) string = "id = 2" User.where(string) string = "{id

在这方面,我可以做到:

User.where{id.eq "2" | admin.eq true}
质疑。我想知道我是否可以转换一个字符串,这是一个如下条件:

string = "id: 2"

并运行:

User.where{string}


结果不是散列。我该怎么做呢?

您需要的是
散列
,而不是
字符串
。你可以这样使用它

hash = {id: 2}
User.where(hash)
string = "id = 2"
User.where(string)
string = "{id: 2}"
User.where(eval string)
如果你真的想用
string
你可以这样做

hash = {id: 2}
User.where(hash)
string = "id = 2"
User.where(string)
string = "{id: 2}"
User.where(eval string)
如果要执行字符串,可以使用
eval
。那么就是这样,

hash = {id: 2}
User.where(hash)
string = "id = 2"
User.where(string)
string = "{id: 2}"
User.where(eval string)

NB要使用下面的变体,应该阅读Google查询“ruby eval是邪恶的”的前五页输出

User.where(instance_eval("{#{string}}"))

是的,但关键是如何将字符串转换为条件?(只是开玩笑的名字)。您知道
User.where(id:2)
是正确的语法,如果字符串是
“id:2”
,我们无法更改它,那么如何让
User.where(string)
运行。有没有这样的方法:
User.where(string.to_xxx)
User.where(xxx(string))
使用此链接改进您的问题:顺便说一句,xxx被称为“哈希”。@SergioTulentsev
JSON.parse
需要有效的JSON,不是吗?:
JSON.parse“{id:2}”#⇒ JSON::ParserError:784:在{id:2}处出现意外标记
I由于实例的评估而被否决;我觉得你的警告太弱了。这个答案确实需要一个明确的语句,比如“不要这样做!它会破坏你的应用程序的安全性”@WayneConrad你可以想什么就想什么,也可以对每个包含完全有效、有用的语言约束的答案投否决票,这些约束是Matz引入的,目的是使ruby尽可能强大。我从来没有加入过仇恨Eval的宗教派别;在某些情况下,这是伟大的。进一步思考后,我希望我没有投反对票。我仍然认为如果有一个更强烈的警告,答案会更好,但否决票是严厉的,我道歉。@WayneConrad绝对没有什么可道歉的;因此,由人类为人类创造,幸运的是,我们所有人都有不同的观点(否则生活会太无聊)。重要的是,答案仍然存在,并且(目前)分数为
-1
,这反过来意味着:a)所描述的实现方法存在,(二)主要不受社会人士欢迎。我个人很欣赏任何意见分享,不管是正面的还是负面的。谢谢你的关心。