0
$ rails -v 
Rails 3.1.1 
$ ruby -v 
ruby 1.9.2p312 (2011-08-11 revision 32926) [i686-linux] 

を再現することができ、完全なコードがあり、ちょうど私に従ってください:MongoidまたはRails3のバグですか?ここでは、問題を再現したい場合は、奇妙な「バグ」

まず、これらの3つのモデル(単にコピー)を作成します。

#school.rb 
class School 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    has_many :students 

end 

#student.rb 
class Student 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    has_many :books 
    belongs_to :school 

    accepts_nested_attributes_for :books 

end 

さんが起こったか見てみましょう、そして、

ruby-1.9.2-head :001 > School.destroy_all;Student.destroy_all; Book.destroy_all; School.create 
ruby-1.9.2-head :001 > Student.create school_id: School.first.id, 'books_attributes' => {'1' => {'name' => 'I am a book'}} 

#book.rb 
class Book 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :name 

    belongs_to :student 

    validate :check 

    def check 
    # The calling for the 'school' method caused the issue 
    self.student.school 
    end 

end 

第二に、あなたのコンソールおよびペーストを実行

ruby-1.9.2-head :002 > Book.count 
MONGODB xxx_development['$cmd'].find({"count"=>"books", "query"=>{}, "fields"=>nil}) 
=> 2 

、さらには、あなたは「学生にhas_manyを設定している場合書籍との関係:「自動保存:true」:

class Student 
...... 
has_many :books, autosave: true 
...... 
end 

さんが起こったでしょうか見てみましょう:

ruby-1.9.2-head :001 > School.destroy_all;Student.destroy_all; Book.destroy_all; School.create 
ruby-1.9.2-head :001 > Student.create school_id: School.first.id, 'books_attributes' => {'1' => {'name' => 'I am a book'}} 
ruby-1.9.2-head :002 > Student.count 
MONGODB xxx_development['$cmd'].find({"count"=>"students", "query"=>{}, "fields"=>nil}) 
=> 2 

ruby-1.9.2-head :004 > Student.all.to_a 
MONGODB xxx_development['students'].find({}) 
=> [#<Student _id: 4f62a8341d41c81bc6000002, _type: nil, created_at: 2012-03-16 02:40:52 UTC, updated_at: 2012-03-16 02:40:52 UTC, school_id: BSON::ObjectId('4f62a8341d41c81bc6000001')>, #<Student _id: 4f62a8341d41c81bc6000003, _type: nil, created_at: 2012-03-16 02:40:52 UTC, updated_at: 2012-03-16 02:40:52 UTC, school_id: nil>] 

ruby-1.9.2-head :005 > Book.count 
MONGODB xxx_development['$cmd'].find({"count"=>"books", "query"=>{}, "fields"=>nil}) 
=> 2 
ruby-1.9.2-head :006 > Book.all.to_a 
MONGODB xxx_development['books'].find({}) 
=> [#<Book _id: 4f62a8341d41c81bc6000003, _type: nil, created_at: 2012-03-16 02:40:52 UTC, updated_at: 2012-03-16 02:40:52 UTC, name: "I am a book", student_id: BSON::ObjectId('4f62a8341d41c81bc6000002')>, #<Book _id: 4f62a8341d41c81bc6000002, _type: nil, created_at: 2012-03-16 02:40:52 UTC, updated_at: 2012-03-16 02:40:52 UTC, name: nil, student_id: nil>] 

このバグは本当に狂気私を実行します。 追加のモデルなぜ書籍の検証方法で '学校'を呼び出す場合ですか?

また、私が間違っていたことがありますか?

答えて

1

コードはここでうまくいきますが、あなたは間違ったことはしていませんが、Mongoidはmasterまたは2.4.xでこの同じコードに問題はありません。犯人を見つけるためにここに私の提案を参照してください。私はそれをテストするための新しい空のレールのアプリを作成したとき

https://github.com/mongoid/mongoid/issues/1826

+0

は問題がまだ存在していた、あなたにDurranありがとう。 しかし、mongoid(2.3.x)をgithubから最新のバージョンに更新した後、すべて正常に動作します。 :) – Croplio

関連する問題