以下是设置:
的Gemfile:
gem 'mongo_mapper', '>= 0.13.0.beta1'
gem 'plucky', '>= 0.6.5'
控制器:
@job = Job.where(:admin_id => a.id)
Rails控制台输出(记录器):
@job is []
一个“a.id”值恰好是:
a.id is 51ddbd6b972791243d0000f1
直接查询Mongo:
db.jobs.find({ admin_id: "51ddbd6b972791243d0000f1" })
>>>Lots of stuff<<<
多少?
> db.jobs.find({ admin_id: "51ddbd6b972791243d0000f1" }).count()
202
那么 - 为什么这个查询在Mongo中直接完成时会返回结果,并在从控制器调用时返回一个空数组?
更具体地说 - 这是简单的循环:
@tech_d = []
@tech.each do |a|
Rails.logger.info("a.id is " + a.id)
@job = Job.where(:admin_id => a.id)
Rails.logger.info("@job is " + @job.to_a.to_s)
产生这样的东西:
a.id is 51ddbd6b972791243d0000f1
@job is []
a.id is 51f976f2811d830002000adc
@job is []
但正如我已经证明的那样 - 在Mongo中直接完成这个简单的查询会有结果。
**编辑 - 我已经尝试了mongo_mapper gem 0.12.0的GA版本,结果是相同的(降级为0.5.2匹配 - 没有变化)
答案 0 :(得分:0)
您没有结果,因为在您使用它时它只会创建查询。
您需要通过附加.all
@job = Job.where(:admin_id => a.id)
会回复你:
=> #<Plucky::Query admin_id: "51ddbd6b972791243d0000f1", transformer: #<Proc:0x00000003d5c2a0@/var/lib/gems/1.9.1/gems/mongo_mapper-0.12.0/lib/mongo_mapper/plugins/querying.rb:76 (lambda)>>
你应该这样做:
@job = Job.where(:admin_id => a.id).all
or simply
@job = Job.all(:admin_id => a.id)
请参阅此处的下一段:http://mongomapper.com/documentation/plugins/querying.html#criteria:
Mongo对动态查询提供了丰富的支持。 MongoMapper使用Plucky 构造只在Mongo时检索数据的查询代理对象 需要。这允许查询由几个条件组成 在被评估之前。
答案 1 :(得分:0)
拍摄我的脸,答案结果是串起来......
a.id.to_s而不是查询中的a.id.
那真是太糟糕了。我可以使用Rails.logger.info(a.id)获取正确的输出 - 没有to_s方法 - 但我必须将它放到查询中...
耶稣那么明显它会伤害我。