我在我的代码中偶然发现了这个:
当我在Rails中使用MongoMapper编写查询时:
@res =客户。其中({$ foo,$ bar})
然后我运行@ res.inspect - 我得到:
@res is #<MongoMapper::Plugins::Querying::DecoratedPluckyQuery merchant_id: "518b762e89651a0389000013", phone: "**********", transformer: #<Proc:0x007fde074078a0@/usr/local/rvm/gems/ruby-2.0.0-p247/gems/mongo_mapper-0.13.0.beta1/lib/mongo_mapper/plugins/querying.rb:66 (lambda)>>
Ergo - 我的变量是实际的查询字符串。
当我改变它时:
@res =客户。全部({$ foo,$ bar})
然后@ res.inspect - 我得到:
@res is [#<Customer _id: BSON::ObjectId('51a9806589651a05da000001'), account_id: "", admin_id: nil, city_id: "Kailua, Hawaii", company_id: "0", created_at: Sat, 11 May 2013 00:00:00 UTC +00:00, cust_notes: "", datecreated: 2013-01-06 00:00:00 UTC, datemodified: 2013-01-06 00:00:00 UTC, **REMOVED PRIVATE DATA HERE** type: "customer", updated_at: Sun, 15 Sep 2013 22:43:56 UTC +00:00, zip_code: *****>]
Ergo - 它实际上是查询的结果(这是我一直期待的)。
现在很奇怪,这里的具体区别是我没有做“respond_to do | format |”而且我没有在视图中访问@res - 我正在尝试查看它的结果仍然在控制器中以实现重定向目的。
因为我的应用程序中的绝对是其他地方我正在做同样的“Customer.where”或“Job.where”的东西,然后那个实例变量被抛到了视图中我我会做@ customer.name之类的事情,或者从数组中获取值。
为什么
答案 0 :(得分:1)
我知道这已经有几个月了,但我想我会做出回应以防其他人因为同样的问题而遇到它。
WHERE返回Plucky :: Query而不是结果,因此您可以在执行实际查询之前向其添加额外的功能。
@johns = Customer.where(name: 'john').fields(:foo).limit(10).sort(:foo).all
在最终使用all
,first
,each
等执行查询之前,您还可以传递查询以对其执行其他WHERE过滤。
@johns_older_than_10 = filter_by_age(Customer.where(name: 'john')).all
def filter_by_age(query)
query.where(age: { :$gt => 10 })
end
请注意,如果您使用all
进行循环,则无需返回each
。