-2

我有这个字符串:'industry.in'我想将它转换为:industry.in. 当我这样做'industry.in'.to_sym时,结果是::"industry.in"

任何人都知道如何使它成为::industry.in而不是?

我这样做是为了在 Mongoid 中对数组字段进行条件查询:

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

3 回答 3

5

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

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

call #in method on :industry symbol

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

于 2013-02-13T09:10:34.167 回答
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>
于 2013-02-13T14:28:54.550 回答
-4

Rails 方法 - to_sym

这些都是一样的。

'industry.in'.to_sym变成:industry.in

此外,有关 to_sym 的更多信息,请参阅此内容。

于 2013-02-13T09:27:02.467 回答