我有这个字符串:'industry.in'
我希望将其转换为:industry.in
。当我'industry.in'.to_sym
时,结果为::"industry.in"
。
任何人都知道如何进入::industry.in
而不是?
我这样做,所以我可以在Mongoid中为数组字段进行条件查询:
criteria = 'industry.in'.to_sym
Company.where(criteria => ['Information Technology'])
答案 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)