1

私はこのドキュメントをBlog、Postと呼び、embeds_many:postsを付けています。これ自体はembeds_many:commentsです。いくつかのブログを保存しようとすると、「文字列を整数に変換できません」というエラーが表示されていました。調査したところ、空のデータ、すべてのフィールドがnilの埋め込み投稿ドキュメントが見つかりました。これらの投稿オブジェクトでは、「文字列を整数に変換できません」という同じエラーが発生します。

なぜそれがゼロだったのかは私のコードからの何かかもしれませんが、問題は私がこの投稿を保存、更新、破棄したり、コメントで何かをしたりできないことです。mongodbコンソールに手動でログインし、それらのオブジェクトを削除する必要があります。

なぜこれが起こるのか、そしてそれをどのように処理するのか、何か考えはありますか?

関係がある場合は、MongoHQを使用しています。

4

1 に答える 1

2

私は同様の問題に直面しています。mongoDB サービスにはまったく関係ありません。

明確にするために

class A
  include Mongoid::Document
  embeds_many :bs, class_name: 'B'
end

class B
  include Mongoid::Document
  embedded_in :a, class_name: 'A'
  embeds_many :cs, class_name: 'C'
end

class C
  include Mongoid::Document
  embedded_in :b, class_name: 'B'
end

私の場合、B の関係を C にコメントすると、完全に機能しますが、すぐに B と C を接続すると、次のスタック トレースが得られます。

TypeError - can't convert String into Integer: () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/relations/proxy.rb:149:in `[]' () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/relations/proxy.rb:149:in `method_missing' () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/relations/embedded/many.rb:402:in `method_missing' () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/fields.rb:75:in `apply_default' () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/fields.rb:47:in `block in apply_pre_processed_defaults' () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/fields.rb:46:in `each' () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/fields.rb:46:in `apply_pre_processed_defaults' () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/document.rb:110:in `block in initialize' () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/threaded/lifecycle.rb:84:in `_building' () Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/document.rb:106:in `initialize'

#reflect_on_association を介してリレーションを調べて、mongoid が失われる可能性があるかどうかを確認します。

---- 編集 && 独自のソリューション ----

デバッガーでスタック トレースを調べると、ある時点で mongoid が _id メソッドを呼び出し、それに対する適切なメソッド応答を見つけることができません。

私の直感は、関係の解決中に何かがモデルの初期化を壊したということでした。

したがって、リレーション定義をトリプルチェックする必要があります。

私の場合、解決策は魔法でした。

embeds_many :fields
#that I replaced by
embeds_many :resource_fields

そして、上に示した class_name 定義では正しく機能しません。なんで ?fields は初期化中に使用されるモンゴイドメソッドだと思うからです。

それがあなたを助けることを願っています。

于 2013-11-19T17:03:31.113 に答える