0

私はTagモデルを持っています:

class Tag
  include Mongoid::Document

  embedded_in :taggable, :polymorphic => true

  key :title
  field :title, :type => String
end

このモデルが になる前はembedded_inkey :titleid をタイトルに基づいたものにする必要がありました。何らかの理由で埋め込まれたため、ID は4fb42e1f5d9a1e68f100000d. タイトルに基づいてキーを設定する方法はありますか?

4

1 に答える 1

1

キーで指定されたIDを、指定したものと正確に取得できます。共有していないカプセル化モデルに問題があるのではないでしょうか? 以下は、Ruby 1.9.3、Rails 3.2.3、Mongoid 2.4.9 で動作します。

class Item
  include Mongoid::Document

  embeds_many :tags, as: :taggable

  key :name
  field :name, :type => String
end

テスト/ユニット/tag_test.rb

require 'test_helper'

class TagTest < ActiveSupport::TestCase
  def setup
    Item.delete_all
    #Tag.delete_all
  end

  test "key title" do
    item = Item.create(name: 'book')
    assert_equal(1, Item.count)
    assert_equal('book', Item.where(name: 'book').first[:_id])
    tag = Tag.new(title: 'scifi')
    item.tags << tag
    assert_equal('scifi', Item.where(name: 'book').first.tags.first[:_id])
    puts Item.all.to_a.first.to_json
  end
end

テスト出力

Run options: --name=test_key_title

# Running tests:

{"_id":"book","name":"book","tags":[{"_id":"scifi","title":"scifi"}]}
.

Finished tests in 0.010775s, 92.8074 tests/s, 278.4223 assertions/s.

1 tests, 3 assertions, 0 failures, 0 errors, 0 skips
于 2012-05-17T19:33:32.153 に答える