2012-05-30 70 views
0

我試圖從父文檔中刪除嵌入的文檔,然後添加另一個嵌入式文檔,但出現錯誤。我的語法不正確?如何在mongoid中的現有父文檔中創建新的嵌入式文檔?

錯誤

NoMethodError: undefined method `create' for []:Array 

代碼

u = User.last 
u.classes.destroy_all 
u.classes.create(:name => "Philsophy") # I get the error right at this line 

Ruby on Rails的3.0.3
Mongoid 2.0.0.beta.20

謝謝!

+0

能否請您給您的模型結構。 – abhas

+0

'Mongoid 2.0.0.beta.20'嚴重嗎?這個分支的最新版本是2.0.2。先嚐試升級。 –

回答

0

關係方法返回一個數組,而不是您的基類。 要創建並嵌入對象,您需要調用新的方法,然後將 添加到

下面是一個可能接近你想要的工作示例。希望它能幫助你繼續前進。

class User 
    include Mongoid::Document 
    field :name, type: String 
    embeds_many :classes, class_name: 'MyClass' 
end 

class MyClass 
    include Mongoid::Document 
    field :name, type: String 
    embedded_in :user 
end 

測試/單位/ user_test.rb

require 'test_helper' 

class UserTest < ActiveSupport::TestCase 
    def setup 
    User.delete_all 
    end 

    test "embedded doc" do 
    User.create(name: 'Gary') 
    assert_equal(1, User.count) 
    u = User.last 
    u.classes.destroy_all 
    puts "u.classes.class: #{u.classes.class}" 
    u.classes << MyClass.new(:name => 'Philosophy') 
    user = User.find(u.id) 
    assert_equal('Philosophy', user.classes.first.name) 
    puts user.to_json 
    end 
end 

測試輸出

Run options: --name=test_embedded_doc 

# Running tests: 

u.classes.class: Array 
{"_id":"4fc62aeb7f11baa5b0000001","classes":[{"_id":"4fc62aeb7f11baa5b0000002","name":"Philosophy"}],"name":"Gary"} 
. 

Finished tests in 0.009929s, 100.7151 tests/s, 201.4302 assertions/s. 

1 tests, 2 assertions, 0 failures, 0 errors, 0 skips 
+0

感謝您的幫助加里,但沒有奏效。我發現如何使它不出錯。請看看http://stackoverflow.com/questions/10823599/why-is-mongoid-not-allowing-for-the-creation-of-a-new-embedded-document-when-usi – Goalie

+0

你didn' t爲「class」提供模型,did是「Class」的名稱,這似乎是由您提及的問題的答案所指示的?如果是這樣,這是與Ruby的類相沖突的,這對於Ruby來說非常重要,而且你真的不想重新適應它。 –

相關問題