0

这是设置:

宝石文件:

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 版本,结果是相同的(将 plucky 降级为 0.5.2 以匹配 - 没有变化)

4

2 回答 2

0

朝我的脸开枪,答案竟然是把它串起来……

查询中的 a.id.to_s 而不是 a.id。

太牛逼了 我可以 Rails.logger.info(a.id) 并获得正确的输出 - 没有 to_s 方法 - 但我必须 to_s 将其放入查询中......

耶稣,这太明显了,它伤害了我。

于 2013-10-08T20:45:45.873 回答
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 检索数据。这允许查询在被评估之前由多个条件组成。

于 2013-10-08T11:28:53.030 回答