2012-05-16 3 views
0

У меня Tag модели:Mongoid встроенных ключи

class Tag 
    include Mongoid::Document 

    embedded_in :taggable, :polymorphic => true 

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

До этой модели был embedded_in, имея key :title вынудили идентификатор, чтобы быть на основе названия. По какой-то причине теперь, когда он встроен, идентификаторы возвращаются к вещам вроде 4fb42e1f5d9a1e68f100000d. Любые идеи о том, как использовать ключ на основе названия?

+0

Может быть, ошибка в Mongoid? Вы пробовали смотреть на источники? –

+0

Какую точную версию Mongoid вы используете? –

+0

@GaryMurakami Я использую версию 2.4.9 в соответствии с моим Gemfile.lock – Matthew

ответ

1

Я могу получить идентификаторы, указанные ключом, с тем, что вы указали именно. Возможно, у вас есть проблема с вашей инкапсулирующей моделью, которую вы не разделили? Следующие работы для меня с 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 
+0

Спасибо, я понял это на основе того, что вы написали. Проблема заключалась в том, как создавались теги. Если я сделал «tag = Tag.new», а затем в следующей строке «tag.title =» некоторый заголовок «', тогда возникают проблемы. Если я сделаю это на одной строке, 'tag = Tag.new (title:« some title »)', тогда все будет идеально. Угадайте, потому что он должен иметь '_id' во время создания ... – Matthew

Смежные вопросы