2011-11-17 32 views
5

Tôi đã theo mô hình dùng, nhúng mô hình loại,MongoDB - tạo ra một tài liệu mới trong một mảng nhúng

class User 
    include Mongoid::Document 
    include BCrypt 

    field :email,   :type => String 
    field :password_hash, :type => String 
    field :password_salt, :type => String 

    embeds_many :categories 
    embeds_many :transactions 
    .... 
    end 

Câu hỏi của tôi là, tôi chỉ thấy rằng nếu tôi sử dụng mã:

me = User.where("some conditions") 
me.categories << Category.new(:name => "party") 

tất cả mọi thứ hoạt động tốt, nhưng nếu tôi sử dụng phương pháp .Create:

me = User.where("some conditions") 
me.categories << Category.create(:name => "party") 

tôi sẽ nhận được một ngoại lệ:

undefined method `new?' for nil:NilClass 

Có ai biết tại sao không? Và từ mongoid.org http://mongoid.org/docs/persistence/standard.html, tôi có thể thấy rằng .new và .create thực sự tạo ra cùng một lệnh mongo.

Cần trợ giúp, cảm ơn :)

Trả lời

10

Tạo ngay lập tức lưu tài liệu vào mongo. Vì tài liệu danh mục nằm trong một tài liệu khác (như được nhúng), bạn không thể lưu riêng nó. Đó là lý do tại sao bạn nhận được lỗi.

Để rõ ràng hơn, giả sử tài liệu nhúng như một lĩnh vực trong các phụ huynh tài liệu, trong đó có lĩnh vực phụ. Bây giờ bạn có thể dễ dàng hiểu rằng bạn không thể lưu một trường mà không có tài liệu. đúng?

tay khác mới khởi tạo lớp tài liệu và sẽ được chỉ chèn vào doc mẹ khi sử dụng < <.

Category.create(:name => "party") 
>>NoMethodError: undefined method `new?' for nil:NilClass 

tương đương với

c = Category.new(:name => "party") 
c.save 
>>NoMethodError: undefined method `new?' for nil:NilClass 

Hope this helps

+0

hoàn toàn hiểu, rất rõ ràng. – larryzhao

Các vấn đề liên quan