Ruby:使用'。'转换字符串符号

时间:2013-02-13 09:05:50

标签: ruby mongoid

我有这个字符串:'industry.in'我希望将其转换为:industry.in。当我'industry.in'.to_sym时,结果为::"industry.in"

任何人都知道如何进入::industry.in而不是?

我这样做,所以我可以在Mongoid中为数组字段进行条件查询:

criteria = 'industry.in'.to_sym    
Company.where(criteria => ['Information Technology'])

3 个答案:

答案 0 :(得分:5)

:"industry.in"实际上是industry.in符号,以复制/可管理的方式表示。

如果直接输入:industry.in,您将收到“无方法”错误,因为Ruby会将其解析为:

call #in method on :industry symbol

所以,'industry.in'.to_sym实际上是在做你需要的。

答案 1 :(得分:1)

实际上,这很简单。但首先你必须了解你想要做什么。

:industry.in

此处:industry是符号,in是该符号上的方法调用。因此,将字符串拆分为两部分,将第一部分转换为符号,并使用第二部分动态调用方法。

require 'mongoid'

s = 'industry.in'
parts = s.split('.') # => ["industry", "in"]
parts[0].to_sym.send(parts[1]) # => #<Origin::Key:0x007fa872ec0550 @name=:industry, @strategy=:__intersect__, @operator="$in", @expanded=nil, @block=nil>


# just the same as literal
:industry.in # => #<Origin::Key:0x007fa872ebf970 @name=:industry, @strategy=:__intersect__, @operator="$in", @expanded=nil, @block=nil>

答案 2 :(得分:-4)

Rails方法 - to_sym

这些都是一样的。

'industry.in'.to_sym变为:industry.in

另外,有关to_sym的更多信息,请参阅this