リレーションシップメソッドクラスは、基本クラスではなく配列を返します。オブジェクトを作成して埋め込むには、クラスで新しいメソッドを呼び出してから、それをクラスに追加する必要があります。
これはおそらくあなたが意図したものに近い実際の例です。それがあなたが先に進むのを助けることを願っています。
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
test / unit / 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