Posted at

SymbolOperator (MongoMapper 由来)

More than 1 year has passed since last update.

Model.where(:id.ne => nil) などと書けるやつ。 MongoMapper の独自拡張で、 mongo-ruby-driver 直で使う場合は通らない。

[3] pry(main)> :id.ne

#<SymbolOperator:0x00007fb64e33a660 @field=:id, @operator="ne">
[4] pry(main)> :id.ne.class
SymbolOperator < Object
[5] pry(main)> :id.ne.class.ancestors
[
[0] SymbolOperator < Object,
[1] Comparable,
[2] Object < BasicObject,
[3] ActiveSupport::Dependencies::Loadable,
[4] PP::ObjectMixin,
[5] MongoMapper::Extensions::Object,
[6] JSON::Ext::Generator::GeneratorMethods::Object,
[7] Kernel,
[8] BasicObject
]

ってなってるけど、 SymbolOperator が定義されてるのは Plucky gem のほう https://github.com/mongomapper/plucky/blob/master/lib/plucky/extensions/symbol.rb

Symbol に .ne メソッドなどをはやしていて、そのメソッドの返り値が SymbolOperator のインスタンス。という具合。

ショートハンドで書けて便利かと思いきや、 mongo-ruby-driver 直で使いたい場合の書き換えでミスりやすいので、 .where(:id => { '$ne' => nil }) みたいに書くようにしたほうがよさそう。