0

セットアップは次のとおりです。

Gemfile:

gem 'mongo_mapper', '>= 0.13.0.beta1'
gem 'plucky', '>= 0.6.5'

コントローラ:

@job = Job.where(:admin_id => a.id)

Rails コンソール出力 (ロガー):

@job is []

1 つの「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

使用するとクエリが作成されるだけなので、結果は得られません。

追加して「実行」する必要があります.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 に答える
0

顔を撃って、答えはそれを文字列化することであることが判明しました...

クエリの a.id の代わりに a.id.to_s。

それはとてもすごいです。Rails.logger.info(a.id) を実行して正しい出力を得ることができます - to_s メソッドなし - しかし、それをクエリに to_s する必要があります...

イエス様、それはとても明白で、私を傷つけます。

于 2013-10-08T20:45:45.873 に答える