-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 が次のように解析するため、"No method" エラーが発生します。

call #in method on :industry symbol

だから、'industry.in'.to_sym実際にあなたが必要とすることをしています。

于 2013-02-13T09:10:34.167 に答える
1

実際、それは非常に簡単です。しかし、最初にあなたはあなたが何をしようとしているのかを理解しなければなりません。

:industry.in

これ:industryがシンボルであり、そのシンボルinメソッド呼び出しです。したがって、文字列を2つの部分に分割し、最初の部分をシンボルにキャストし、2番目の部分を使用してメソッドを動的に呼び出します。

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 に答える